2017-05-03 52 views
1

我有隻存儲單個值的模型:如何在遷移過程中複製字段值?

class Number(models.Model): 
    id = models.AutoField(primary_key=True, unique=True) 

現在我想改變的行爲,所以我需要的數量不是唯一的了。

class Number(models.Model): 
    id = models.AutoField(primary_key=True, unique=True) 
    number = models.IntegerField(blank=True) 

如何判斷遷移使用ID字段作爲「一次性值」?

+0

它並問你有什麼用已經存在的記錄呢? –

+0

是的。如何告訴它從其他領域獲取價值? – JasonTS

+0

你想運輸的是當前在'id'字段到'number'字段嗎? –

回答

2

的方式我:這可能與RunPython函數,它是這樣做做這樣的事情是添加字段,就像你已經完成並運行遷移

python manage.py schemamigration your_app --auto 
python manage.py migrate your_app 

然後你就可以創建一個datamigration像這樣

python manage.py datamigration your_app copy_id_to_number 

然後打開文件遷移剛與上面的命令創建和更改def forward(self, orm)像這樣

def forwards(self, orm): 
    for num in orm.Number.objects.all(): 
     if num.id: 
      num.number = num.id 

那麼你將要當您嘗試makemigrations運行此遷移

python manage.py migrate your_app 
1

您需要在兩次遷移中完成此操作。第一個將添加字段,以0一次性默認第二個將拷貝過來的值:

from django.db.models import F 
Number.objects.update(number=F('id')) 
相關問題