Как отменить URL, который использует DefaultRouter ()? - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь использовать reverse () внутри моего теста.Я пытался этот ответ !но это не работает.
Я все еще получаю ошибку
django.urls.exceptions.NoReverseMatch: Reverse for 'patients-list' with no arguments not found.

router = DefaultRouter()
router.register(r'patients', views.PatientSet, base_name='patients')

urlpatterns = [
    url(r'^', include(router.urls)),
]

Вот ModelViewSet

class PatientSet(viewsets.ModelViewSet):
    queryset = Patient.objects.all()
    serializer_class = PatientSerializer
    permission_classes = [IsDoctorUser]
    filter_backends = (filters.DjangoFilterBackend,)
    filter_fields = ['is_active']

Я использую этот способ в своем тесте url = reverse('patients-list')

1 Ответ

2 голосов
/ 09 мая 2019

Во-первых, base_name kwarg к маршрутизаторам не рекомендуется в пользу basename kwarg в DRF 3.11, однако это не должно вызывать проблем.На самом деле я не вижу ничего плохого в приведенном вами примере кода.

Я бы порекомендовал попробовать установить пакет django-extensions .После установки и настройки расширений django вы можете использовать команду python manage.py show_urls для вывода списка всех ваших маршрутов.

python manage.py show_urls

/api/accounts/users/ accounts.views.UserViewSet account:user-list
/api/accounts/users/<uuid>/ accounts.views.UserViewSet account:user-detail

Каждая строка содержит URL /api/accounts/users/<uuid>/, путь представления accounts.views.UserViewSet и имя (это то, что вы хотите для обратного) маршрута account:user-detail.С этим я надеюсь, что вы сможете найти правильное название для вашего маршрута.Часть URL также указывает любые параметры, необходимые для этого маршрута.

...