【问题标题】:Django REST framework - SearchFilter not filteringDjango REST 框架 - SearchFilter 不过滤
【发布时间】:2017-05-03 09:33:22
【问题描述】:

我正在使用Django 1.10 和django-rest-framework 3.5.3。 我想要一个通用的搜索查询:在许多字段上搜索一个值。 我在文档中找到了SearchFilter。

我尝试将过滤器后端添加到 ViewSet,但它似乎不起作用。包含所有对象的任何搜索查询响应。

视图集:

from rest_framework import filters

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer
    filter_backends = (filters.SearchFilter,)
    filter_fields = ['username', 'email', 'is_staff', 'groups']

查询网址:

http://localhost:8000/users/?search=something

此外,在文档中,他们显示在 django rest 网页中添加了一个新按钮“过滤器”。对我来说不是。

【问题讨论】:

    标签: python django django-rest-framework django-filter


    【解决方案1】:

    使用search_fields 代替filter_fields。 filter_fields 用于启用对特定字段的过滤,例如/users/?username=something&is_staff=True。

    【讨论】:

      【解决方案2】:

      作为对您的第二个问题的回应,作为一个仅供参考,如果您将SearchFilter 添加到您的filter_backends 属性,则必须添加search_fields 属性,反之亦然。 DjangoFilterBackend 也是如此,您必须添加 filter_fields 属性。没有它们,可浏览 api 上的“过滤器”按钮将不可用。

      【讨论】:

      • 只是想为其他人评论一下,我是 django/wagtail/DRF 的新手,并且正在为无头后端设置一些 API 端点。我关注了文档并不断寻找,但无法弄清楚为什么在我的自定义模型上的搜索只会在使用 ?search= 时返回所有结果。这条评论提示我需要将 BaseAPIEndpoint.filter_backends.append(SearchFilter) 添加到我的扩展 APIEndpoint 类中。
      • @pspahn 你可以添加到filter_backends 数组中。
      猜你喜欢
      • 2021-09-15
      • 2012-12-24
      • 2017-05-27
      • 2014-02-17
      • 1970-01-01
      • 2015-12-09
      • 2014-09-11
      • 2018-11-05
      • 2017-10-26
      相关资源
      最近更新 更多