Den*_*aia 17 django django-south
我想在ForeignKey我的模型中添加一个字段.为了实现这一点,我做了3个步骤:
ForeignKey字段null=True,然后创建了一个schemamigration.datamigration以便用合理的价值填充该外键.应用此迁移后,我非常确定在该字段中没有留下NULL值的对象.ForeignKey字段更改为null=False,然后创建另一个schemamigration.但是,我在第3步遇到了问题:
? The field 'MyModel.fkfield' does not have a default specified, yet is NOT NULL.
? Since you are making this field non-nullable, you MUST specify a default
? value to use for existing rows. Would you like to:
? 1. Quit now, and add a default to the field in models.py
? 2. Specify a one-off value to use for existing columns now
? Please select a choice:
Run Code Online (Sandbox Code Playgroud)
嗯...没有默认值对这个字段有意义,而且现在我很确定没有对象将该字段设为NULL.所以... 我不知道如何正确回答这个问题.如果可以,我会说"不设置任何默认值,如果在该列中发现任何NULL,则抛出错误".
就目前而言,作为解决该问题的解决方法,我选择了选项2,然后将其1用作一次性默认值.这是一个非常糟糕的解决方案,但至少south不会抱怨它并创建迁移.
NOT NULL什么?(使用south)south我要求一个不应该有一个字段的默认值时,我该怎么办?我正在使用django-1.2和south-0.7.
相关问题:Django South - 将null = True字段转换为null = False字段
相关文档:第3部分:高级命令和数据迁移
(脚注:在StackOverflow,我们有两个看起来相同的标签:"django-south"和"south",但我没有足够的声誉来建议同义词)
Udi*_*Udi 15
只是一个想法:由于这是一个外键,您可以将默认值设置为您知道永远不会有引用记录的记录,即0或-1.如果south实际上尝试使用此默认值,则您的数据库将引发错误.