2017-05-03 3 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

方法I:これはこのような何かをしRunPython機能を行うことができます

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

をその移行をすでにやったようにフィールドを追加して実行することであるこの種のものは、その後、あなたはその後、移行ファイルを開くので

python manage.py datamigration your_app copy_id_to_number 

のようなデータ移行を作成することができますそれはちょうど上記のコマンドで作成したので、

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

ようdef forward(self, orm)を変更された後、あなたがmakemigrationsを試してみて、すでにレコードが存在して何のuを頼むとき

python manage.py migrate your_app 
1

2回の移行でこれを行う必要があります。最初のものは、第1の値をコピーします0の1オフデフォルトでは、フィールドを追加します。

from django.db.models import F 
Number.objects.update(number=F('id')) 
関連する問題