我遇到了问题,我在模型中进行了一些更改,因为我有一个必须更改为ForeignKey
的整数字段
好的错误我分配给字段derived_to
中的所有对象值1。
我现在想将此列中的所有行标记为null。我该怎么做?这是我最后的两次迁移
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'),
),
]
那就是我需要进行一次新的迁移,将null分配给derived_to
列中work_order中的所有对象,因为现在所有对象都有derived_to
指向OutsourceOptions上的第一个寄存器,这是不对的。
谢谢,抱歉我的英语不好。
答案 0 :(得分:2)
如果我理解正确,您想将所有现有的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),
]