我正在尝试在Django REST Framework中创建一个路由,以便我可以从与之相关的对象访问注释。
我的模型是Comment
,User
和Marker
,每个标记每个用户可以有一条评论。
我想要的是GET /comments/marker/{marker-pk}/
的一种方式,它会返回已连接的用户留在该标记上的评论(如果有的话)。
现在我有GET /comments/{comment-pk}/
这是默认设置,如果我在自定义方法上使用@detail_route
装饰器,我只能访问注释但不能通过标记访问。
我的观点:
class CommentViewSet(viewsets.ModelViewSet):
queryset = Comment.objects.all()
serializer_class = MarkerCommentSerializer
答案 0 :(得分:0)
所以我在写这个问题时想出了如何做到这一点。不确定它是非常惯用还是RESTful ......
我添加了一条新路线:
router.register(r'comments/marker', maps_views.CommentByMarkerViewSet, base_name="comments/marker")
新的ViewSet
:
class CommentByMarkerViewSet(viewsets.ModelViewSet):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
def retrieve(self, request, pk=None):
comment = get_object_or_404(Comment, user=request.user, marker__pk=pk)
serializer = self.get_serializer(comment)
return Response(serializer.data)
现在我可以访问/comments/marker/{marker-pk}/
上的评论。