问题
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,
回答1:
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.
回答2:
So avoid 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 route.
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
来源:https://stackoverflow.com/questions/25921021/django-rest-framework-detail-page-of-detail-route