Django-filter在Django REST Framework中无法过滤数据问题求助
问题排查及解决方案
以下是你配置中存在的问题和对应修复方案:
- 过滤后端属性名错误
代码中写的filterset_backends是错误属性名,DRF 视图类中指定过滤后端的标准属性名为filter_backends。 - 元组定义语法错误
(DjangoFilterBackend)不会被Python识别为元组,只会被识别为单个类对象,需要在末尾加逗号改成(DjangoFilterBackend,)才是合法的单元素元组。 - 检查基础依赖配置
先确认项目settings.py中已经完成以下基础配置:INSTALLED_APPS列表中添加了django_filters- 若要全局生效过滤功能,可直接在settings.py中添加如下配置,不需要在单个视图里单独指定
filter_backends:
REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'] }
修正后的views.py参考代码:
class ListingFiltered (generics.ListAPIView): queryset = Listing.objects.all() serializer_class = ListingSerializer filter_backends = (DjangoFilterBackend,) filterset_fields= ['price']
如果需要更灵活的过滤规则,可将filterset_fields修改为字典形式配置匹配规则:
filterset_fields = { 'price': ['exact', 'lt', 'gt', 'gte', 'lte'] }
配置后可通过?price__lt=2000这类参数查询价格小于2000的记录,也方便调试验证过滤功能是否生效。
内容的提问来源于stack exchange,提问作者juanmac
相关产品推荐
相关产品推荐

