Подтвердить что ты не робот

Получить имя URL-адреса маршрутизатора при тестировании в Django Rest Framework

У меня есть некоторые проблемы. Я использую маршрутизаторы в Django Rest Framework, и я хочу проверить некоторые методы api.

В urls.py:

router = DefaultRouter()
router.register(r'my-list', MyViewSet, base_name="my_list")

urlpatterns = [
    url(r'^api/', include(router.urls,
                          namespace='api'), ),

]

Итак, в tests.py я хочу использовать что-то вроде reverse. Теперь я использую

response = self.client.get('/api/my-list/')

Его строчная кодированная строка, если я использую:

response = self.client.get(reverse('api:my_list')

У меня есть ошибка:

django.core.urlresolvers.NoReverseMatch: Reverse for 'my_list' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

Как это исправить?

Спасибо!

4b9b3361

Ответ 1

DRF добавляет суффиксы в представлениях для разных URL-адресов - список, подробные и, возможно, настраиваемые URL-адреса. Вы можете видеть это в исходном коде и в docs. Поэтому в вашем случае фактическое обратное должно быть примерно таким:

reverse('api:my_list-list')    # for list URL. e.g. /api/my-list/
reverse('api:my_list-detail')  # for detail URL. e.g. /api/my-list/<pk>/

Вот почему, вероятно, лучше использовать имя ресурса в качестве маршрутизатора base_name. Например base_name='user' vs base_name='users_list'.