2011-09-01 71 views
5

我有了一列,現在的模型,description,這對網站的幾個不同的頁面填充的區域。客戶希望將其分成幾個不同的列,以便他們可以在網站的某些部分填充不同的值。所以,我必須到description欄更改爲frontpage_descriptionresourcepage_description。我試圖想出一個辦法南做到這一點,這樣的description列的值是兩個「新」的列(初始)的默認值。這是我到目前爲止有:從其他列南偏移默認值?

# file: project/app/xxxx_mymigration.py 
import datetime 
from south.db import db 
from south.v2 import SchemaMigration 
from django.db import models 

class Migration(SchemaMigration): 
    def forwards(self, orm): 
     db.rename_column('myapp', 'description', 'frontpage_description') 
     db.add_column('myapp', 'resourcepage_description', self.gf('myfields.TextField')(default='CHANGEME'), keep_default=False) 

    def backwards(self, orm): 
     db.rename_column('myapp', 'frontpage_description', 'description') 
     db.delete_column('myapp', 'resourcepage_description') 

    models = { 
     # ... 

我想知道的部分是self.gf(...)(default='CHANGEME'),我想知道是否有一種方法來設置的descriptionfrontpage_description值成爲resourcepage_description的默認值?

我查看了orm參數,它允許您在遷移過程中訪問模型,但我遇到的所有示例都涉及使用它來定義遷移期間的關係,而不是實際訪問單個記錄。

我只是將不得不拆分此成一個schemamigration和datamigration?

回答

2

這正是三個步驟:架構遷移到添加列,數據遷移設置它們,而另一個架構遷移刪除原始description列。 90%的被替您完成從./manage命令,所以它不是好像這是可悲的更多的工作。

+1

是啊,我意識到我是缺少後不久我張貼在這裏: - /。這實際上是一個2步過程,因爲我可以運行'db.rename_column'並只添加1列,然後運行兩列的數據遷移。 –