Маршрутизатор 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)),
]