2016-10-04 109 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 

我該如何實施?

Django的:1.10

Django的REST框架: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()) 

所以你的查詢集發送到串行的是,通過get_queryset創建,然後用filter_queryset

過濾一個