2016-12-22 48 views
0

我有django 1.10項目。還有我有一個模型反饋:當創建相同模型的新字段時從現有字段複製值

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

這種模式存在,並且數據庫表的列公司通過按鍵公司的項目填補。

現在我需要一些新的字段添加到模型:

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檢查[這裏](https://stackoverflow.com/questions/12518560/django-update-table-using-data-from-another-table) – shadi

相關問題