如何在一个ModelViewSet 的@detail_route 方法中使用另一个ModelViewSet 的实例?
两个Model User 和 Post,Post 是 User 发的帖子
所以就有两个 ModelViewSet,UserViewSet 和 PostViewSet
我想使用 @detail_route 用 /users/1/posts/ 的 url 格式获取某个用户的 帖子列表
如果是简单的获取,这个实现没什么问题,现在有个问题是我想在返回列表的时候可以过滤
这是普通的 PostViewSet 中的获取列表,self 是 PostViewSet 的实例,所以没什么问题
# 这是调用自身的过滤规则
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
如果使用 /users/1/posts/ 的方式的话,self 就是 UserViewSet 了
所以我想在这个自定义的 @detail_route 中使用 PostViewSet
这样就可以直接使用 post 的过滤规则等等,就是把上面的self 可以换成 PostViewSet 的实例
class UserViewSet(viewsets.ModelViewSet):
queryset = MyUser.objects.all()
serializer_class = UserSerializer
filter_class = UserFilter
@detail_route(methods=['get'], url_path='posts')
def get_posts(self, request, pk=None):
# 这样写是不对的,问题好像是出在传参这里
post_viewset = PostViewSet(request=self.request)
the_user = self.get_object()
post_queryset = the_user.posts.all()
queryset = post_viewset.filter_queryset(post_queryset)
page = post_viewset.paginate_queryset(queryset)
if page is not None:
serializer = post_viewset.get_serializer(page, many=True)
return post_viewset.get_paginated_response(serializer.data)
serializer = post_viewset.get_serializer(queryset, many=True)
return Response(serializer.data)
这样传参好像是不对的,提示找不到 format_kwarg,请问我该如何实现我这个需求呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论