Django rest framework 在drf中使用django过滤器覆盖列表方法

Django rest framework 在drf中使用django过滤器覆盖列表方法,django-rest-framework,django-filter,Django Rest Framework,Django Filter,我正在使用django过滤器过滤drf中的视图集 当我有一个ModelViewset时,它可以很好地工作,如下面的示例所示: 类MyExampleViewSetviewsets.ModelViewSet: queryset=myqueryset 模型=模型示例 filter\u backends=DjangoFilterBackend,OrderingFilter, filterset_字段={ 字段\示例:[精确,icontains], 另一个字段示例:[精确,范围], } 序列化程序_cla

我正在使用django过滤器过滤drf中的视图集

当我有一个ModelViewset时,它可以很好地工作,如下面的示例所示:

类MyExampleViewSetviewsets.ModelViewSet: queryset=myqueryset 模型=模型示例 filter\u backends=DjangoFilterBackend,OrderingFilter, filterset_字段={ 字段\示例:[精确,icontains], 另一个字段示例:[精确,范围], } 序列化程序_class=MyExampleViewSet 我的问题是当我使用ViewSet重写list方法时,如下所示:

类MyExampleViewSetviewsets.ViewSet: def listself,request,queryset=queryset,*args,**kwargs: 归还某物 在这种情况下,我的过滤器不工作。在这种情况下,有没有办法使用django过滤器覆盖列表


我知道我可以用query_参数做什么,但我想使用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\u querysetself.get\u queryset


因此,如果要覆盖列表方法但保留筛选功能,请确保使用queryset调用self.filter\u queryset。

首先,您应该了解列表方法是如何实现的:

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\u querysetself.get\u queryset

因此,如果要覆盖list方法,但保留过滤功能,请确保使用queryset调用self.filter\u queryset