我在我的viewsets.ModelViewSet上使用@detail_route。
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)
此代码创建url:
/companies/
/companies/{id}
/companies/{id}/accounts
我不知道如何将路线/视图添加到详细信息帐户:
/companies/{id}/accounts/{id_account}
有没有办法添加路线和视图来处理这条路线?
(最好的选择是在CompanyViewSet上添加它)
干杯,
答案 0 :(得分:8)
DRF本身不处理嵌套路由,您可以手动处理它或使用扩展名,如drf-nested-routers,但它已过时。
我的建议:不要与框架作斗争,DRF不擅长使用url-nested资源,不管怎么做。
答案 1 :(得分:3)
尽可能避免使用它,但有时嵌套资源或方法是有意义的
因此,对于您处理accounts/
网址和accounts/{account_id}
的情况,您需要定义另一条详细路线。
您已经为accounts
定义了一个,因此您只需添加另一个名称不同的函数,并确保添加url_path
以便获取account_id
变量。
@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 similar answer为参考