问题描述
我想为已经存在的对象创建并使用特定日期预填充DateTimeField。
models.py
publish_date = models.DateTimeField(verbose_name=_('publish date'))
我尝试先创建一个可为空的字段,用一些数据填充它,然后从中删除null=True
:
migrations.py
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',field=models.DateTimeField(verbose_name='publish date'),]
由于正在运行迁移,因此出现错误:
django.db.utils.OperationalError:不能更改表 “ myapp_mymodel”,因为它有待处理的触发事件
该如何解决?
解决方法
只需将迁移最多分为2个或3个即可。您应该能够在一个mig中执行前2个操作,但不能对第3个执行。