2016-08-30 10 views
0

ビューセットの取得またはリストメソッドを返さずに、他の動作をするビューでdjangoフィルタを使用したいとします。 私のコードは以下の通りです:(明らかに)私はself.retrieve(要求)を返す場合にも、正しくフィルタを取得しますクエリセットを/api/articlesを押すとその誘導体によってそう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 

、しかし、私は私のクエリセットを変更することはできませんよ。その後、私の質問は、その状況では、djangoフィルタを適用するために必要なものです、または、どうすればr equest.query_string.pop(bla bla bla)の代わりにそれを行うように指示できますか?

ありがとうございます!

答えて

0

私は最近同様の問題を抱えています。

私はViewSet.filter_queryset()という機能を正確に実行しています。

ViewSet.get_object()get_object_by_pk() usinqあなたdetailed_route方法は以下のように作るのでself.filer_queryset()を使用することを忘れないでください:

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) 
関連する問題