在drf中使用django-filter覆盖列表方法

问题描述 投票:0回答:1

我正在使用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。

django-rest-framework django-filter
1个回答
0
投票

首先,您应该看一下如何实现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()

© www.soinside.com 2019 - 2024. All rights reserved.