2015-09-03 16 views
0

我試圖在Django REST框架中創建一個路由,以便我可以從它與其相關的對象訪問評論。Django REST - 如何獲得連接用戶的對象

我的模特是CommentUserMarker,每個標記可以爲每個用戶註釋一個。

我想要的是一種做GET /comments/marker/{marker-pk}/的方法,它將返回連接用戶在該標記上留下的評論(如果有的話)。

現在我有GET /comments/{comment-pk}/這是默認的,如果我在自定義方法上使用@detail_route裝飾器,我只能訪問註釋,但不能使用標記。

我的視圖集:

class CommentViewSet(viewsets.ModelViewSet): 
    queryset = Comment.objects.all() 
    serializer_class = MarkerCommentSerializer 

回答

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}/訪問評論。

+0

嗨!我想你是對的。唯一的小意見是,如果標記是評論的「容器」,那麼通常的做法是通過/ markers/{marker_pk}/comments訪問評論。這可以使用嵌套路由輕鬆完成。對於checkout軟件包drf-nested-routers。在Github上,他們有一個很容易理解的例子:https://github.com/alanjds/drf-nested-routers/ – heorhi