2016-08-25 63 views
1

如果我重寫列表,則後端過濾器不起作用。如果我重寫列表定義,如何應用我的過濾器?如何在覆蓋列表時添加過濾器後端?

class CircuitViewSet(viewsets.ModelViewSet): 
    queryset = Circuit.objects.all() 
    serializer_class = CircuitSerializer 
    filter_backends = (filters.DjangoFilterBackend, filters.OrderingFilter,) 
    filter_class = CircuitFilter 

    def list(self, request): 
     queryset = Circuit.objects.all() 
     serializer = CircuitSerializer(queryset, many=True, context={'request': request}) 
     return Response(serializer.data) 
+0

我想知道你是否找到了解決這個問題的方案。如果你能分享它,我們將不勝感激。謝謝! – Chris

+0

@Chris我在下面添加了我的答案。希望它能幫助你。 – rechie

回答

0

我以前也遇到了這個問題。在我的例子中,我只是刪除filter_backends = (filters.DjangoFilterBackend, filters.OrderingFilter,)部分,並開始過濾工作。

2
class CircuitViewSet(viewsets.ModelViewSet): 
    queryset = Circuit.objects.all() 
    serializer_class = CircuitSerializer 
    filter_backends = (filters.DjangoFilterBackend, filters.OrderingFilter,) 
    filter_class = CircuitFilter 

    def list(self, request): 
     # with filter 
     queryset = self.filter_queryset(self.get_queryset()) 

     # pagination 
     page = self.paginate_queryset(queryset) 
     if page is not None: 
      serializer = self.get_serializer(page, many=True) 
      return self.get_paginated_response(serializer.data) 

     serializer = self.get_serializer(queryset, many=True) 
     return Response(serializer.data) 
+0

你爲我節省了很多時間! –