mar*_*gue 4 django django-models django-migrations
我有一个问题,我在模型中做了一些更改,因为我有一个整数字段必须更改为ForeignKey
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,
),
]
Run Code Online (Sandbox Code Playgroud)
还有最后一张
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'),
),
]
Run Code Online (Sandbox Code Playgroud)
好吧,这就是我需要进行新的迁移以将 null 分配给列中 work_order 中的所有对象derived_to,因为现在所有对象都derived_to指向 OutsourceOptions 上的第一个寄存器,这是不正确的。
谢谢并为我糟糕的英语感到抱歉。
如果我理解正确的话,您想将所有现有derived_to值设置为空吗?您可以使用RunPython来做到这一点
在历史上下文中运行自定义 Python 代码。code(和reverse_code,如果提供)应该是接受两个参数的可调用对象;
def forwards_func(apps, schema_editor):
Workorder = apps.get_model('appname','Workorder')
Workorder.objects.update(derived_to=None)
Run Code Online (Sandbox Code Playgroud)
将其添加到迁移中,如下所示:
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),
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3259 次 |
| 最近记录: |