South在Python/Django中忽略字段默认值的变化
为什么South不识别Python模型中默认字段值的变化呢?举个例子,假设我们有一个已经用South迁移过的模型:
class MyFamily(models.Model):
family_size = models.IntegerField(verbose_name="What is your family size?", default=2)
现在,我想把默认值从2改成4。但是,当我进行模式迁移时,South却报告:
python manage.py schemamigration family --auto change_default_from_two_to_four_for_size
Running migrations for family:
- Nothing to migrate.
- Loading initial data for family.
我可以手动更新初始迁移,并用SQL直接更新这个字段,但这样做太麻烦了。有没有我没找到的South命令,可以识别默认值的变化呢?
谢谢!
1 个回答
11
South 不会更新已有列的默认值,因为这对他来说只在向一个非空表添加新列时才重要。django orm
会在将新行写入数据库之前,处理将新的默认值写入这些新行。
如果你要从 django orm
之外操作数据库,就需要手动更新它。
更多解释可以查看 south/db.add_column