我正在使用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我的问题是,当我使用ViewSet覆盖list方法时,如下所示:
class MyExampleViewSet(viewsets.ViewSet):
def list(self, request, queryset=queryset, *args, **kwargs):
return something在这种情况下,我的过滤器不起作用。有没有办法在这种情况下使用django-filter (覆盖列表)?
我知道我可以用query_params做什么,但我想使用django-filter。
发布于 2020-05-27 02:20:32
首先,您应该看看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-filter在这一点上应用了queryset = self.filter_queryset(self.get_queryset())。
因此,如果您希望覆盖list方法,但保留过滤功能,请确保使用查询集调用self.filter_queryset()。
https://stackoverflow.com/questions/62028321
复制相似问题