Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在django迁移中使用特定日期预先填充DateTimeField_Python_Django_Django Models_Django Migrations - Fatal编程技术网

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

Python 在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(

我想为已经存在的对象创建并预先填充带有特定日期的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=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项操作