我不知道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
。我完全不知道这意味着什么。
答案 0 :(得分:3)
进一步了解之前,请确保如果South已经执行了任何失败的迁移,那么最好重新恢复到最后一个正在运行的migration
。
这里有两个选项,首先你可以Data Migration
。另请查看ref。
第二种方式您可以先weekTwo
字段null
和blank
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字段的唯一性会引发错误。
我认为如果第二种方式不起作用,你仍然必须使用数据迁移,或者试一试,这次尝试第二种方式,而不是让它null
, blank
更改整个Field
类型。尝试一下;
weekTwo = models.ForeignKey(WeekTwo)
但请记住数据迁移绝对是明智的标准方式。