1

我不知道 Django 想告诉我什么。我有一个模型,WeekTwo它继承自Week,它继承自modelsModel。我有另一个模型,UserProfile. 我想WeekTwo用作 OneToOne Key in UserProfile,所以我插入了以下代码行:

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。我真的不知道这意味着什么。

4

1 回答 1

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他们。

无论如何,当 south 发现您的字段不在NULL并且没有default值时,在这schemamigration一步它会建议您为它提供一个值,再次在这里您的字段是OneToOneField,因为即使 south 也让您有机会为您在模型上的现有记录,weekTwo 字段的唯一性将引发错误。

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

weekTwo = models.ForeignKey(WeekTwo)

但请记住,这里的数据迁移绝对是更智能和标准的方式。

于 2013-03-26T22:41:27.540 回答