2011-05-16 39 views
12

为什么South无法识别Python模型中默认字段值的更改?例如,将现有模型迁移到南:South忽略Python/Django中字段默认值的更改

class MyFamily(models.Model): 
    family_size = models.IntegerField(verbose_name="What is your family size?", default=2) 

现在,我想将默认值从两个更改为四个。然而,schemamigrating模块时,南报道:

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直接更新领域,但是这是一个痛苦。我有没有发现南方命令能够识别默认值的变化?

谢谢!

回答

11

South不会更新现有列的默认值,因为只有在将新列添加到非空表时,它才会对他有影响。 django orm将处理新的默认值写入数据库之前的新行。

如果您要在django orm之外的数据库上工作,则必须手动更新它。

更多的解释south/db.add_column

+0

是的,不幸的是我们打的DB从PHP一样,所以我可能要手动更改。 South很难改变默认值。 ;-) – MontyThreeCard 2011-05-17 13:37:36

+0

我所做的基本上是对该字段进行评论,schemamigration/migrate并再次取消注释。无论如何,我的数据库是空的 – 2012-04-04 16:20:28

相关问题