2016-10-04 5 views
0

カスタムクエリーセットを作成する場合、MyModelViewSetfilter_backendsを考慮に入れることはできますか?ModelViewSetのクエリーセットをフィルタバックエンドを適用してオーバーライドします

class MyModelViewSet(viewsets.ModelViewSet): 
    filter_backends = (CustomFilter,) 
    serializer_class = MySerializer 

    def get_queryset(self): 
     # It should not return all objects, but only results from `CustomFilter` 
     queryset = LedgerEntry.objects.all() 
     # some extra filtering 
     return queryset 

これはどのように実装しますか?

ジャンゴ:1.10

Djangoの残りのフレームワーク:3.4.6

+0

@ e4c5 'get_queryset()'で使用したいのであれば、 'CustomFilter'で既に持っているフィルタリングをすべてコピーしなければなりません。 – primoz

+0

申し訳ありませんが細心の注意を払っていませんでした。あなたは 'filter_backends'を乗り越えて何かを取っていますか? – e4c5

答えて

2

はいすることができます。ただ、ビューセット内のアクションメソッドでビューセット

class MyModelViewSet(viewsets.ModelViewSet): 
    filter_backends = (CustomFilter,) 
    serializer_class = MySerializer 

    def filter_queryset(self, queryset): 
     # super needs to be called to filter backends to be applied 
     queryset = super().filter_queryset(queryset) 
     # some extra filtering 
     return queryset 

filter_queryset方法を拡張し、それが実際にシリアライザに送信され、この

queryset = self.filter_queryset(self.get_queryset()) 

だからあなたのクエリセットを行うことはfilter_queryset

get_querysetによって作成した後、濾過一つです
関連する問題