2016-12-22 15 views
0

私はdjango 1.10プロジェクトを持っています。私はモデルがありますフィードバック:同じモデルの新しいフィールドを作成するときに既存のフィールドから値をコピー

class Feedback(FirstMixin, SecondMixin, models.Model): 
    company = models.OneToOneField(
     verbose_name='Company', 
     to=Company, 
     related_name='feedback' 
    ) 

このモデルは存在し、DBテーブルの列会社は会社のアイテムのキーで埋められています。

は今、私はモデルにいくつかの新しいフィールドを追加する必要があります。

custom_name = models.CharField(
    verbose_name='Company Custom Name', 
    null=False, 
    max_length=settings.DATABASE_STRING_LENGTH 
) 

このフィールドには、会社のカスタム名を格納する必要があります。

移行中にこのフィールドの値を関連する会社名と同じにするにはどうすればよいですか? マイグレーションのコードを変更する必要がありますか、それをモデルで定義する方法がありますか?

答えて

4

はい作成された移行ファイルを変更する必要があります。 次のソリューションをお試しください。

from django.db import migrations, models 

def migrate_custome_name(apps, schema_editor): 
    Feedback = apps.get_model("app_name","Feedback") 
    for i in Feedback.objects.all(): 
     i.custom_name = i.company 
     i.save() 

class Migration(migrations.Migration): 

    dependencies = [ 
     ------ 
    ] 

    operations = [ 
     migrations.AddField(
      model_name='feedback', 
      name='custom_name', 
      -- your code -- 
     ), 
     migrations.RunPython(migrate_custome_name), # Add this function to migrate data 
    ] 

希望すると、これが役に立ちます。

+0

大きなテーブルの場合、データベースレベルでこれを行うほうが効率的です。例えばpostgres check [here](https://stackoverflow.com/questions/12518560/django-update-table-using-data-from-another-table) – shadi

関連する問題