Python 在django迁移中使用特定日期预先填充DateTimeField
我想为已经存在的对象创建并预先填充带有特定日期的DateTimeField 型号.pyPython 在django迁移中使用特定日期预先填充DateTimeField,python,django,django-models,django-migrations,Python,Django,Django Models,Django Migrations,我想为已经存在的对象创建并预先填充带有特定日期的DateTimeField 型号.py publish_date = models.DateTimeField(verbose_name=_('publish date')) def set_default_publish_date(apps, schema_editor): MyModel = apps.get_model('myapp', 'MyModel') MyModel.objects.all().update(
publish_date = models.DateTimeField(verbose_name=_('publish date'))
def set_default_publish_date(apps, schema_editor):
MyModel = apps.get_model('myapp', 'MyModel')
MyModel.objects.all().update(publish_date=datetime.date(day=1, month=1, year=2019))
class Migration(migrations.Migration):
dependencies = [
('myapp', '0005_auto_20200831_1208'),
]
operations = [
migrations.AddField(
model_name='mymodel',
name='publish_date',
field=models.DateTimeField(null=True, verbose_name='publish date'),
preserve_default=False,
),
migrations.RunPython(set_default_publish_date, migrations.RunPython.noop),
migrations.AlterField(
model_name='mymodel',
name='publish_date',
field=models.DateTimeField(verbose_name='publish date'),
preserve_default=False,
),
]
我首先尝试创建一个可空字段,用一些数据填充它,然后从中删除null=True
:
迁移。py
publish_date = models.DateTimeField(verbose_name=_('publish date'))
def set_default_publish_date(apps, schema_editor):
MyModel = apps.get_model('myapp', 'MyModel')
MyModel.objects.all().update(publish_date=datetime.date(day=1, month=1, year=2019))
class Migration(migrations.Migration):
dependencies = [
('myapp', '0005_auto_20200831_1208'),
]
operations = [
migrations.AddField(
model_name='mymodel',
name='publish_date',
field=models.DateTimeField(null=True, verbose_name='publish date'),
preserve_default=False,
),
migrations.RunPython(set_default_publish_date, migrations.RunPython.noop),
migrations.AlterField(
model_name='mymodel',
name='publish_date',
field=models.DateTimeField(verbose_name='publish date'),
preserve_default=False,
),
]
由于运行迁移,我得到一个错误:
django.db.utils.OperationalError:无法更改表
“myapp_mymodel”,因为它有挂起的触发事件
我能做些什么来修复它呢?只需将您的迁移分为2个或3个。您应该能够在一次mig中执行前2项操作,但不能执行第3项操作