该字段没有指定默认值,但是NOT NULL

时间:2013-03-26 22:25:42

标签: python database django

我不知道Django试图告诉我什么。我有一个模型WeekTwo,它继承自Week,继承自modelsModel。我有另一个模型,UserProfile。我想在WeekTwo中使用UserProfile作为OneToOne密钥,因此我插入了以下代码行:

weekTwo = models.OneToOneField(WeekTwo)

但是,当我尝试使用python manage.py schemamigration my_app --auto迁移数据库时,出现以下错误:

The field 'UserProfile.weekTwo' does not have a default specified, yet is NOT NULL.

我尝试将default=0添加到我的weekTwo声明中,但现在我在尝试模式迁移时遇到此错误:

IntegrityError: column weekTwo_id is not unique

此外,南方现在告诉我,我在interim state between migrations并且我might be able to recover。我完全不知道这意味着什么。

1 个答案:

答案 0 :(得分:3)

进一步了解之前,请确保如果South已经执行了任何失败的迁移,那么最好重新恢复到最后一个正在运行的migration

这里有两个选项,首先你可以Data Migration。另请查看ref

第二种方式您可以先weekTwo字段nullblank

weekTwo = models.OneToOneField(WeekTwo, null=True, blank=True)

然后让South通过

为您生成迁移
python manage.py schemamigration my_app --auto

我确信南方现在不会抱怨它,然后

python manage.py migrate

如果现在一切正常,您现在可以返回并更改为weekTwo字段

weekTwo = models.OneToOneField(WeekTwo)

然后generate迁移migrate他们。

无论如何,当南方发现您的字段不在NULL且没有default值时,在schemamigration步骤,它会建议您为其提供值,同样在这里你的字段是OneToOneField,因为即使是南方,你也有机会为你现有的模型提供一个默认值,因为dayTwo字段的唯一性会引发错误。

我认为如果第二种方式不起作用,你仍然必须使用数据迁移,或者试一试,这次尝试第二种方式,而不是让它nullblank更改整个Field类型。尝试一下;

weekTwo = models.ForeignKey(WeekTwo)

但请记住数据迁移绝对是明智的标准方式。