我正在使用django-filter过滤drf中的视图集。
[当我有ModelViewset
时,可以像下面的示例一样正常工作:
class MyExampleViewSet(viewsets.ModelViewSet):
queryset = myqueryset
model = ModelExample
filter_backends = (DjangoFilterBackend, OrderingFilter,)
filterset_fields = {
"field_example": ["exact", "icontains"],
"another_field_example": ["exact", "range"],
}
serializer_class = MyExampleViewSet
我的问题是当我使用list
覆盖ViewSet
方法时,如下所示:
class MyExampleViewSet(viewsets.ViewSet):
def list(self, request, queryset=queryset, *args, **kwargs):
return something
在这种情况下,我的过滤器无法正常工作。在这种情况下(覆盖列表)是否可以使用django-filter?
我知道我可以使用query_params做些什么,但是我想使用django-filter。
首先,您应该看一下如何实现list
方法:
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
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)
此时将使用Django过滤器queryset = self.filter_queryset(self.get_queryset())
。
因此,如果要覆盖列表方法但保留过滤功能,请确保使用查询集调用self.filter_queryset()
。