小编Bar*_*y12的帖子

有关 Django Rest Framework 中嵌套 URL 的相关资源

我有两个模型,Foo并且Bar. Bar有一个外键Foo. 我有一个ModelViewSetfor Foo,我希望路由/api/foos/<pk>/bars/返回与bar给定相关的所有 s foo

我知道这可以通过操作来完成。例如

class FooViewSet(viewsets.ModelViewSet):
    serializer_class = FooSerializer
    queryset = Foo.objects.all()

    @action(detail=True, methods=['GET'])
    def bars(self, request, pk):
        queryset = Bar.objects.filter(foo=pk)
        serializer = BarSerializer(queryset, many=True)
        return Response(serializer.data)

    @bars.mapping.post
    def create_bar(self, request, pk):
        request.data['foo'] = pk
        serializer = BarSerializer(request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
Run Code Online (Sandbox Code Playgroud)

然而,这感觉像是很多不必要的样板代码。

不幸的是,使用bars = PrimaryKeyRelatedField(many=True)不适合我的情况,因为每个foo可以有数百个bars,我不想在每个请求中发送。

这是否可以在视图集中以更方便的方式完成?如果没有,DRF 的正常做法是什么?只要能最大限度地减少样板代码,具有不同 URL 的解决方案对我来说也是可以接受的。

django django-rest-framework django-rest-viewsets

5
推荐指数
1
解决办法
1348
查看次数