我有一个 ModelViewSet
在Django的REST框架中,我可以通过以下地址进行POST和GET:
api/v1/users
这些用户与评论表具有相反的关系,我希望能够通过URL访问这些评论:
api/v1/users/<username>/comments
我能够通过设置自定义来完成此操作 @detail_route
通过压倒 queryset
和 serializer_class
但它只适用于GET请求。如果我尝试通过REST Framework的管理部分发布新评论,我会收到一条错误通知,指出“'ListSerializer'对象不可迭代”
这是我的代码:
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserFlat
lookup_field = 'username'
@detail_route(methods=['post','get'])
def comment(self, request, **kwargs):
user = self.get_object()
self.queryset = Comment.objects.filter(recipient=user.id)
self.serializer_class = CommentFlat
serializer = CommentFlat(instance=self.queryset, many=True)
return Response(serializer.data)
新评论应采用以下参数:
comment.author,comment.message,comment.recipient
我可以在管理面板中输入所有这些字段,并尝试创建一个帖子请求,但它失败了。理想情况下,我只需要填写comment.message和comment.author,并且comment.recipient字段应该使用在网址中获取的user.id自动填充。 api/v1/users/<username>/comments
有谁知道为什么我的帖子请求没有完成以及如何自动填充该字段?