南:为唯一且不为空的列运行迁移

时间:2011-08-29 04:23:11

标签: python django django-models django-south

使用South / Django,我遇到了一个问题,我正在尝试为数据库中现有行的模型添加UNIQUENOT NULL列。 South提示我为列指定默认值,因为它是NOT NULL。但由于它也有UNIQUE约束,我不能在models.py中为字段添加默认值,也不能指定一次性值,因为它在所有行上都是相同的。 / p>

我能想到解决这个问题的唯一方法是首先创建一个可为空的列,应用迁移,运行脚本以使用该列中的唯一值填充现有行,然后添加另一个迁移以添加{ {1}}对该列的约束。

但有没有更好的方法来完成同样的事情?

1 个答案:

答案 0 :(得分:13)

是的,这是你应该采取的方法。你应该做schemamigration - > datamigration - > schemamigration为此。不幸的是,如果在SQL中无法做到这一点,南方也无法做到这一点。