我在Django的REST框架中有一个ModelViewSet
,它使我能够完成一篇文章并通过以下地址:
api/v1/users
这些用户与注释表有反向关系,我希望能够通过以下URL访问这些注释:
api/v1/users/<username>/comments
我可以通过重写queryset
和serializer_class
来设置自定义@detail_route
,但它只适用于GET请求。如果我试图通过REST框架的管理部分发布一个新的注释,我会收到一个错误通知,指出“ListSerializer”对象不可iterable”
这是我的代码:
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评论
我可以在管理面板中输入所有这些字段,并尝试创建post请求,但失败了。理想情况下,我只需要填写comment.message和comment.author,comment.recipient字段应该使用在urlapi/v1/users/<username>/comments
中获得的user.id自动填充
有人知道为什么我的post请求没有完成,以及我如何自动填充这一字段吗?
我想出来了。对于那些寻找答案的人来说,解决方案是显式定义在
request.method == 'POST'
时发生的操作,并将对象传递给序列化程序。相关问题 更多 >
编程相关推荐