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

Django Task模型choices参数报错,求助任务分类功能实现

解决Django Task模型choices字段的fields.E005错误

嘿,这个问题我太熟悉了!你运行python3 manage.py makemigrations时碰到的fields.E005错误,核心原因是Django的choices字段要求必须是包含(实际存储值, 人类可读名称)元组的可迭代对象,而你定义的STATUS_CHOICES只是普通的字符串列表,不符合这个规则。

你当前的错误代码:

from django.db import models
STATUS_CHOICES = ('complete', 'incomplete', 'todo')
class Task(models.Model):
    name = models.CharField(max_length = 128)
    due = models.DateTimeField(blank = True, null = True)
    status = models.CharField(max_length = 16, choices = STATUS_CHOICES)
    def __str__(self):
        return (f"{self.name}")

修正后的代码:

我们只需要把STATUS_CHOICES改成元组嵌套元组的格式,每个元素是(实际存在数据库的值,后台/页面显示的友好名称):

from django.db import models
# 改成(实际值, 可读名称)的元组集合
STATUS_CHOICES = (
    ('complete', '已完成'),
    ('incomplete', '未完成'),
    ('todo', '待处理'),
)
class Task(models.Model):
    name = models.CharField(max_length = 128)
    due = models.DateTimeField(blank = True, null = True)
    status = models.CharField(max_length = 16, choices = STATUS_CHOICES, default='todo')
    def __str__(self):
        return (f"{self.name}")

补充说明:

  1. 我还额外加了default='todo'参数,这样创建Task实例时如果不指定status,会默认设为待处理状态,避免出现空值问题
  2. 可读名称可以根据你的需求改成英文,比如('complete', 'Complete'),完全看你业务场景的需要

现在再运行python3 manage.py makemigrations和python3 manage.py migrate,就能正常生成迁移文件啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:09:24