关于python:South:为一个唯一且不为null的列运行迁移

South: run a migration for a column that is both unique and not null

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

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

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


是的,这是你应该采取的方法。您应该为此执行SchemaMigration->DataMigration->SchemaMigration。不幸的是,如果在SQL中没有办法做到这一点,那么South也不能做到。