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
相关产品推荐
相关产品推荐

