2016-08-30 34 views
0

我想在視圖中使用django過濾器,該視圖具有其他一些行爲,但不返回視圖集檢索或列表方法。 我的代碼如下:如何在detail_route()視圖中應用djngoFilterBackend

class ArticleView(ReadOnlyModelViewSet): 
    serializer_class = get_serializer_class(Article) 
    queryset = Article.objects.all() 
    filter_backends = (filters.DjangoFilterBackend,) 
    filter_fields = ('TYPE',) 

    @detail_route() 
    def articles(self, request, pk=None): 
     some_behaviour() 
     return MY QUERYSET (which can or cannot be modified) FILTERED 

因此受到打擊/api/articles及其衍生物的查詢集被正確地過濾,另外,如果我回到self.retrieve(請求)(明顯),但我不能修改我的查詢集。那麼我的問題是,在那種情況下,明確應用django過濾器需要什麼,或者我該如何告訴他這樣做,而不是執行r equest.query_string.pop(bla bla bla)

謝謝!

回答

0

我最近有類似的問題。

我發現ViewSet.filter_queryset()函數正在做這件事。

記住ViewSet.get_object()也使用self.filer_queryset()這樣會讓你的detailed_route方法usinq get_object_by_pk()像:

class ViewSet: 
    def get_object_by_pk(self, pk): 
     return self.get_queryset().get(pk=pk) 

    @detail_route(): 
    def something(self, request, pk): 
     object = self.get_object_by_pk(pk) 
     queryset = object.whatevet_set 
     page = self.paginate_queryset(self.filter_queryset(queryset)) 

     if page is not None: 
      serializer = SerializerClass(page, many=True, context={'request': request}) 
      return self.get_paginated_response(serializer.data) 
     serializer = SerializerClass(queryset, many=True, context={'request': request}) 
     return Response(serializer.data) 
相關問題