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

Django模型fields.E005错误:choices参数不符合可迭代元组要求

问题解决:Django fields.E005 错误修复

核心问题1:元组语法错误

你定义的RESULT_CHOICES里,每个元组的两个元素之间缺少逗号,这是基础语法错误,导致Python无法正确解析成元组列表,Django也就识别不了符合要求的choices结构。比如("PR" "Passed")应该改成("PR", "Passed")。

修正后的RESULT_CHOICES:

RESULT_CHOICES = [
    ("PR", "Passed"),
    ("PR", "Passed with minor Defects"),
    ("PR", "Passed with major Defects"),
    ("FR", "Failed due to minor Defects"),
    ("FR", "Failed due to major Defects"),
    ("FR", "Failed"),
]

额外提醒:这里多个选项用了相同的实际值(比如三个"PR"),虽然语法没问题,但实际使用时会导致选择后存储的值都是"PR",无法区分不同的通过类型,建议给每个选项设置唯一的实际值,比如:

RESULT_CHOICES = [
    ("PR", "Passed"),
    ("PR_MINOR", "Passed with minor Defects"),
    ("PR_MAJOR", "Passed with major Defects"),
    ("FR_MINOR", "Failed due to minor Defects"),
    ("FR_MAJOR", "Failed due to major Defects"),
    ("FR", "Failed"),
]

核心问题2:字典形式的choices用法错误

Django的choices要求是包含(实际值, 可读名称)元组的可迭代对象,直接用字典是不符合要求的。如果想用字典维护选项,需要把字典转换成元组列表,用dict.items()方法:

YEAR_IN_SCHOOL_CHOICES = {
    "FR": "Freshman",
    "SO": "Sophomore",
    "JR": "Junior",
    "SR": "Senior",
    "GR": "Graduate",
}.items()  # 转换成元组列表

或者显式转成列表:

YEAR_IN_SCHOOL_CHOICES = list({
    "FR": "Freshman",
    "SO": "Sophomore",
    "JR": "Junior",
    "SR": "Senior",
    "GR": "Graduate",
}.items())

后续操作

修正语法错误后,重新执行:

python manage.py makemigrations
python manage.py migrate

即可完成迁移,重启服务器后错误应该消失。

内容的提问来源于stack exchange,提问作者menzi mabuza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:00:58