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}")
补充说明:
- 我还额外加了
default='todo'参数,这样创建Task实例时如果不指定status,会默认设为待处理状态,避免出现空值问题 - 可读名称可以根据你的需求改成英文,比如
('complete', 'Complete'),完全看你业务场景的需要
现在再运行python3 manage.py makemigrations和python3 manage.py migrate,就能正常生成迁移文件啦!
内容的提问来源于stack exchange,提问作者Sudeep
相关产品推荐
相关产品推荐

