2011-05-16 40 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

相關問題