You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:03:15