2017-06-05 26 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

相关问题