我刚刚学习了如何通过一次迁移来做到这一点!
当运行makemigrationsdjango
时,应要求你设置一个默认值。在这里定义所有可以使它满意的内容,最后将完成AddField你提到的迁移。
migrations.AddField(
model_name='series',
name='updated_as',
field=models.DateTimeField(default=????, auto_Now=True),
),
将此操作更改为3个操作:
migrations.AddField(
model_name='series',
name='updated_as',
field=models.DateTimeField(null=True, auto_Now=True),
),
migrations.RunPython(set_my_defaults, reverse_func),
migrations.AlterField(
model_name='series',
name='updated_as',
field=models.DateTimeField(auto_Now=True),
),
你的函数定义为:
def set_my_defaults(apps, schema_editor):
Series = apps.get_model('myapp', 'Series')
for series in Series.objects.all().iterator():
series.updated_as = datetime.Now() + timedelta(days=series.some_other_field)
series.save()
def reverse_func(apps, schema_editor):
pass # code for reverting migration, if any