Django-filter ChoiceFilter无法识别已存在模型字段报错如何解决?
问题原因
报错的核心原因是 StartUpViewSet 中的 filterset_fields 参数赋值错误:你传入的是字符串 'status',而 django-filter 要求该参数必须是列表/元组类型,用来指定需要开放筛选的字段。
字符串本质是可迭代对象,程序拿到字符串'status'时会逐字符遍历,把每个字符都当成独立的筛选字段名,最终识别出s、t、a、u这些不存在于模型中的字段,触发报错。
解决方案
根据你的使用场景二选一即可:
- 场景1:不需要自定义ChoiceFilter,直接用默认的字段筛选逻辑
把filterset_fields的赋值改成列表/元组格式:filterset_fields = ['status'] # 或者用元组写法,注意末尾的逗号不能丢 filterset_fields = ('status',) - 场景2:要使用你已经定义好的
StartupFilter自定义筛选类
删掉原来的filterset_fields配置,换成指定自定义过滤类的参数:# 替换原来的 filterset_fields = 'status' filterset_class = StartupFilter
注意:不要同时配置filterset_fields和filterset_class,二者同时存在时filterset_fields会覆盖自定义过滤类的逻辑。
内容的提问来源于stack exchange,提问作者ziwdig44bugs
相关产品推荐
相关产品推荐

