python - Django Rest Framework ViewSet 不按字段过滤
问题描述
我有一个ModelViewSet
withSearchFilter
和OrderingFilter
。一切正常,但是当我尝试按一个特定字段(如localhost:8000:/es/countries/?code=MX
)过滤时,即使只有一个符合条件,它也会返回所有记录。当我使用通用搜索时,例如localhost:8000:/es/countries/?search=MX
,它工作正常。
这是我的ViewSet
:
class CountryViewSet(viewsets.ModelViewSet):
permission_classes = (permissions.IsAuthenticated,)
queryset = models.Country.objects.all()
serializer_class = serializers.CountrySerializer
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter,)
search_fields = ('name', 'code', 'calling_code')
filter_fields = ('name', 'code', 'calling_code')
解决方案
您可以使用DjangoFilterBakend。
在您使用 search_fields 的代码中,它仅适用于搜索参数。(因为它用于搜索和过滤!!)
您需要添加 DjangoFilterBackend,就像在 filter_backends 字段中添加 SearchFilter 和 OrderingFilter 一样。然后在 filter_fields 字段中提及您想要的过滤器。
例如:
class CountryViewSet(viewsets.ModelViewSet):
permission_classes = (permissions.IsAuthenticated,)
queryset = models.Country.objects.all()
serializer_class = serializers.CountrySerializer
filter_backends = (SearchFilter, OrderingFilter, DjangoFilterBackend)
search_fields = ('name', 'code', 'calling_code')
filter_fields = ('name', 'code', 'calling_code')
您还必须安装 django-filter。
pip install django-filter
最后添加django_filter
到INSTALLED_APPS
.
INSTALLED_APPS = [
....
'django_filters',
]
推荐阅读
- flutter - 'onPressed' 不适用于 'Transform' 颤振
- concurrency - 消息处理Kafka的多个节点
- python - 我不确定我的代码有什么问题..(线性/多项式回归)
- ruby - 自制公式无法运行
- node.js - 在 Heroku 上托管节点 js 的 mdb 不起作用
- c# - 使用统一引擎时,我收到错误 ArgumentException: Input Button w is not setup。要更改输入设置,请使用:编辑 -> 设置 -> 输入
- reactjs - Strapi 身份验证提供程序已禁用
- html - CSS calc() 精度问题
- c - x86 配置的最大可用内存大小?
- ios - 导航栏向上推