runpython的更改永远不会应用于datetimefield。
我在模型上添加新的datetimefield
,其默认值为timezone.now()
模型
date = models.DateTimeField(default=timezone.now)
迁移
operations = [
migrations.RunPython(add_expense_date),
migrations.AddField(
model_name='expense',
name='date',
field=models.DateTimeField(default=django.utils.timezone.now),
preserve_default=False,
),]
我写了一个migrations.RunPython
方法,将现有字段的另一个字段_created_at
的值复制到新字段date
。
def add_expense_date(apps, schema_editor):
Expense = apps.get_model("accounting", "Expense")
db_alias = schema_editor.connection.alias
for expense in Expense.objects.using(db_alias).all():
expense.date = expense._created_at
expense.save()
问题是,它始终应用defaut值,并且从不在runpython
调用中应用更改。但是,runpython
方法会被调用。
当我使字段为空时,它默认所有值为null而不是runpython调用中的更改