【问题标题】:Pre-populate DateTimeField with specific date in django migration在 django 迁移中使用特定日期预填充 DateTimeField
【发布时间】:2020-12-25 16:38:52
【问题描述】:

我想为已经存在的对象创建并预填充具有特定日期的 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',
        name='publish_date',
        field=models.DateTimeField(verbose_name='publish date'),
        preserve_default=False,
    ),
]

由于运行迁移,我收到一个错误:

django.db.utils.OperationalError: cannot ALTER TABLE “myapp_mymodel”,因为它有待处理的触发事件

我能做些什么来解决它?

【问题讨论】:

    标签: python django django-models django-migrations


    【解决方案1】:

    只需将您的迁移分成 2 个或可能 3 个。您应该能够在一个 mig 中执行前 2 个操作,但不能执行第 3 个操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 2018-01-04
      • 2019-11-20
      • 2016-04-27
      • 2016-06-27
      • 2018-10-27
      • 1970-01-01
      相关资源
      最近更新 更多