2017-06-05 41 views
0

我有一個問題,我做我的模特一些變化,因爲我有一個整型字段已經被更改爲ForeignKeyDjango - 如何將colum的所有值更改爲null?

好了的錯誤,我指派給所有對象在該領域derived_to值1。

我現在想將此列中的所有行標記爲空。我怎樣才能做到這一點?這是我的最後兩個遷移

class Migration(migrations.Migration): 

    dependencies = [ 
     ('work_order', '0026_auto_20170603_1517'), 
    ] 

    operations = [ 
     migrations.AlterModelOptions(
      name='workorder', 
      options={'verbose_name': 'work order', 'verbose_name_plural': 'work orders'}, 
     ), 
     migrations.AlterField(
      model_name='workorder', 
      name='derived_to', 
      field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='store.OutsourceOption', verbose_name='outsource'), 
     preserve_default=False, 
    ), 
] 

,最後一個

class Migration(migrations.Migration): 

    dependencies = [ 
     ('work_order', '0027_auto_20170605_0836'), 
    ] 

    operations = [ 
     migrations.AlterField(
      model_name='workorder', 
      name='derived_to', 
      field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='store.OutsourceOption', verbose_name='outsource'), 
     ), 
    ] 

那麼這就是所有我需要一個新的遷移來分配無效的所有對象work_order列derived_to,因爲現在所有對象都有指向OutsourceOptions上的第一個註冊表的derived_to,這是不正確的。

感謝和抱歉我的英語不好。

回答

1

如果我已經正確理解了你,你想要將所有現有的derived_to值設置爲空?您可以使用RunPython

在歷史上下文中運行自定義Python代碼。代碼(如果提供了 reverse_code)應該是可接受兩個 參數的可調用對象;

def forwards_func(apps, schema_editor): 

    Workorder = apps.get_model('appname','Workorder') 
    Workorder.objects.update(derived_to=None) 

添加到這個遷移是這樣的:

operations = [ 
    migrations.AlterField(
     model_name='workorder', 
     name='derived_to', 
     field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='store.OutsourceOption', verbose_name='outsource'), 
    ), 
    migrations.RunPython(forwards_func), 
] 
+0

運行完美!非常感謝 – marcosgue

+0

很高興得到了幫助。與您的項目一切順利。 – e4c5

相關問題