在django迁移中使用特定日期预填充DateTimeField

问题描述

我想为已经存在的对象创建并使用特定日期预填充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个执行。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...