Django ViewSet中lte与gte筛选器无法正常工作
问题排查与解决
1. 字段默认值类型不匹配
你的User模型中,deliveredtotime是IntegerField,但默认值设置为字符串'0'。尽管Django会尝试自动转换类型,但这可能导致数据库中存储的数据类型不一致,进而使整数比较筛选(lte/gte)失效。
修正代码:
deliveredtotime = models.IntegerField(default=0)
2. Filter配置属性名错误(适配新版本django-filter)
如果你使用的是django-filter 2.0及以上版本,DRF中已经弃用了旧的filter_fields,改用filterset_fields来定义带查找规则的筛选配置。
修正ViewSet中的配置:
from django_filters.rest_framework import DjangoFilterBackend class PublicUserViewSet(viewsets.ModelViewSet): permission_classes = (IsAuthenticated,) queryset = User.objects.all() serializer_class = UserSerializer filter_backends = [filters.SearchFilter, DjangoFilterBackend] pagination_class = StandardResultsSetPagination # 替换filter_fields为filterset_fields filterset_fields = { 'deliveredtotime': ['gte', 'lte'] }
额外检查
确保你已经在settings.py中注册了django-filter应用:
INSTALLED_APPS = [ # ... 其他应用 'django_filters', ]
执行以上修正后,重新运行服务,访问http://127.0.0.1:8000/api/publicusers/?deliveredtotime__lte=50即可得到正确的筛选结果。
内容的提问来源于stack exchange,提问作者user14491987
相关产品推荐
相关产品推荐

