Маршрутизатор Django REST Framework, похоже, переопределяет мой явно заданный путь в URLpatterns

Новичок в кодировании, поэтому я уверен, что это простая проблема, но я не могу ее решить. Я сократил код, чтобы было проще увидеть проблему.

urls.py

router = routers.DefaultRouter()
router.register(r'clients', views.ClientViewSet, basename='client')

urlpatterns = [
#Bunch of other paths here.
path('client/<int:pk>/contacts',
     login_required(views.contacts_by_client), name="client-contacts"),
path('api/', include(router.urls)),
]

views.py

def contacts_by_client(request, pk):
client = Client.objects.get(id=pk)
contact_list = Contact.objects.filter(user=request.user, client=pk)
context = {
    'contacts': contact_list,
    'client': client
}
return render(request, 'pages/contacts-client.html', context)

class ClientViewSet(viewsets.ModelViewSet):
serializer_class = ClientSerializer
permission_classes = [permissions.IsAuthenticated]

@action(detail=True, methods=['get'], name="Contacts")
def contacts(self, request, pk=None):
# Bunch of code here.

Мое подозрение заключается в том, что маршрутизатор создает имя маршрута под названием "client-contacts" на основе действия, созданного в views.py, однако я не понимаю, почему оно должно иметь приоритет над явно обозначенным шаблоном url, который идет перед ним.

Я знаю, что я, должно быть, упускаю что-то очень простое, но я не могу понять это. Спасибо всем за помощь!

Это то, что вы ищете?

router = routers.DefaultRouter()
router.register(r'clients', views.ClientViewSet, basename='client')
urlpatterns = router.urls
urlpatterns += [
#Bunch of other paths here.
path('client/<int:pk>/contacts',
     login_required(views.contacts_by_client), name="client-contacts"),
path('api/', include(router.urls)),
]
Вернуться на верх