2013-03-26 66 views
1

我不知道Django试图告诉我什么。我有一个型号WeekTwo,它继承自Week,它继承自modelsModel。我有另一个模型,UserProfile。我想用WeekTwo作为UserProfile一个OneToOne关键,所以我插入下面的代码行:该字段没有指定缺省值,但不是NULL

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=0weekTwo声明,但是当我尝试架构迁移,现在我得到这个错误:

IntegrityError: column weekTwo_id is not unique 

此外,南方现在告诉我,我在interim state between migrations,并且我might be able to recover。我从字面上不知道这是什么意思。

+0

您是否阅读过文档? :) http://south.readthedocs.org/en/latest/tutorial/part2.html – favoretti 2013-03-26 22:37:10

+0

它最初告诉你,因为你的新字段是强制性的,表中所有现有的行都需要更新。如果你已经迁移了,它会要求你输入一个默认值。如果你没有迁移,你应该能够删除这两个迁移并重新开始 – 2013-03-26 22:38:23

回答

3

在继续之前请注意,如果南方已经做了任何失败的迁移,最好重新恢复到最后的migration正在工作。

你有两种选择,首先你可以做Data Migration。也看看ref

在第二个方式可以使weekTwonullblank第一

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

然后让南生成由

python manage.py schemamigration my_app --auto 

你迁移我敢肯定,南方不会抱怨现在,然后

python manage.py migrate 

如果使用电子verything现在好了,你现在可以回去,并更改为weekTwo

weekTwo = models.OneToOneField(WeekTwo) 

而且generate迁移然后migrate他们。

无论如何,当南找出你的领域没有NULL,并没有一个default值,在schemamigration步它会提示你提供一个值,在这里再次你的领域是OneToOneField,因为即使给予南您有机会在模型上为您已存在的记录提供默认值,并重新设置weekTwo字段的唯一性会引发错误。

我觉得还是你有数据迁移去,如果第二种方式没有工作,或者给它一个镜头,并尝试第二种方式这个时间,而不是让它nullblank改变整个Field型。尝试一下;

weekTwo = models.ForeignKey(WeekTwo) 

但请记住数据迁移将肯定更聪明,这里的标准方式。

+0

嗯,经历了这些步骤,但我仍然得到相同的错误,一旦我拿出空=真和空=真。 – user1427661 2013-03-26 23:05:20

+0

@ user1427661刚刚更新了答案;) – 2013-03-26 23:15:11