Django Rest Framework - @detail_route的详细信息页面

时间:2014-09-18 19:39:14

标签: django routes django-rest-framework detailview

我在我的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上添加它)

干杯,

2 个答案:

答案 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为参考