I am ussing @detail_route on my viewsets.ModelViewSet.
class CompanyViewSet(viewsets.ModelViewSet):
queryset = Company.objects.all()
serializer_class = serializers.CompanySerializer
@detail_route(methods=['get', ], permission_classes=[IsCompanyUserPermission, ])
def accounts(self, request, pk):
...
return Response(...)
# urls.py
router.register(r'companies', views.CompanyViewSet)
this code creates url:
/companies/
/companies/{id}
/companies/{id}/accounts
I dont know how to add route/view to detail account:
/companies/{id}/accounts/{id_account}
Is there any way to add route and views to handle this route ?
(the best option would be add this on CompanyViewSet)
Cheers,
DRF does not handle nested routes by itself, you may handle it by hand or use an extension, like drf-nested-routers, but its outdated.
My advice : don't fight the framework, DRF is not good at playing with url-nested resources, do it another way.
So avoided it when you can, but sometimes it makes sense to nest resources or methods
So for your case to handle both the accounts/
url and accounts/{account_id}
you define another detail routes.
You have already defined the one for accounts
so you just add another function with a different name and ensure to add the url_path
so you can get the account_id
variable.
@detail_route(methods=['get', ], permission_classes=[IsCompanyUserPermission, ])
def accounts(self, request, pk):
...
return Response(...)
@detail_route(methods=['get', ], permission_classes=[IsCompanyUserPermission, ],
url_path='^queues/(?P<account_id>[0-9]+)')
def account_detail(self, request, pk, account_id):
...
return Response(...)
This answer took this similar answer as a reference