首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在drf中使用django-filter覆盖列表方法

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

Stack Overflow用户
提问于 2020-05-27 01:51:07
回答 1查看 809关注 0票数 3

我正在使用django-filter在drf中过滤我的视图集。

当我有一个ModelViewset时,就像下面的例子一样工作正常:

代码语言:javascript
复制
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方法时,如下所示:

代码语言:javascript
复制
class MyExampleViewSet(viewsets.ViewSet):
    def list(self, request, queryset=queryset, *args, **kwargs):
        return something

在这种情况下,我的过滤器不起作用。有没有办法在这种情况下使用django-filter (覆盖列表)?

我知道我可以用query_params做什么,但我想使用django-filter。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-27 02:20:32

首先,您应该看看list方法是如何实现的:

代码语言:javascript
复制
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()

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62028321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档