我有以下型号 -
class ToDo(models.Model):
todo_title = models.CharField(null=True, blank=True, max_length=200)
todo_status = models.IntegerField(choices=TASK_STATUS, null=True, blank=True)
assigned_to = models.ManyToManyField(OrgStaff, null=True, blank=True, related_name='assigned_to')
assigned_by = models.ManyToManyField(OrgStaff, null=True, blank=True, related_name='assigned_by')
assigned_time = models.DateTimeField(auto_now_add=True)
completed_time = models.DateTimeField(null=True, blank=True)
然后我运行python manage.py convert_to_south todoapp
,其中 todoapp 是其中的名称
应用程序。然后我运行python manage.py migrate todoapp.
完成后,我在上面的模型中添加了另一个字段 -
class ToDo(models.Model):
todo_title = models.CharField(null=True, blank=True, max_length=200)
todo_slug = models.SlugField(null=True, blank=True)
todo_status = models.IntegerField(choices=TASK_STATUS, null=True, blank=True)
assigned_to = models.ManyToManyField(OrgStaff, null=True, blank=True, related_name='assigned_to')
assigned_by = models.ManyToManyField(OrgStaff, null=True, blank=True, related_name='assigned_by')
assigned_time = models.DateTimeField(auto_now_add=True)
completed_time = models.DateTimeField(null=True, blank=True)
现在我进行架构管理 - python manage.py schemamigration todoapp --auto
然后python manage.py migrate todoapp
执行此操作会出现以下错误 -
Running migrations for taskbase:
- Migrating forwards to 0002_auto__add_field_todo_todo_slug.
> taskbase:0002_auto__add_field_todo_todo_slug
KeyError: u'todo_title'
知道我收到此错误的原因吗? 我撞了我的头,但无法找到原因。
答案 0 :(得分:0)
使用'todo_'为“标题”和“状态”添加前缀可能会导致与表字段名称发生冲突。实际上,在数据库中,Django正在命名字段todoapp_todo_todo_status,而南方可能只会感到困惑。南方在内部做了一些创造性的事情,因此碰撞。我建议尝试:
class ToDo(models.Model):
title = models.CharField(null=True, blank=True, max_length=200)
status = models.IntegerField(choices=TASK_STATUS, null=True, blank=True)
assigned_to = models.ManyToManyField(OrgStaff, null=True, blank=True, related_name='assigned_to')
assigned_by = models.ManyToManyField(OrgStaff, null=True, blank=True, related_name='assigned_by')
assigned_time = models.DateTimeField(auto_now_add=True)
completed_time = models.DateTimeField(null=True, blank=True)
我想变得迂腐,我还可以指出 todoapp 应该被称为 todos ,但这对你的项目没有任何影响。