Django-DB-Migrations:无法更改表,因为它具有未决的触发事件

我想从TextField中删除null = True:

-    footer=models.TextField(null=True, blank=True)

+ footer=models.TextField(blank=True, default='')

我创建了一个架构迁移:

manage.py schemamigration fooapp --auto

由于某些页脚列包含,NULL因此error在运行迁移时会得到以下信息:

django.db.utils.IntegrityError:“页脚”列包含空值

我将此添加到架构迁移中:

    for sender in orm['fooapp.EmailSender'].objects.filter(footer=None):

sender.footer=''

sender.save()

现在我得到:

django.db.utils.DatabaseError: cannot ALTER TABLE "fooapp_emailsender" because it has pending trigger events

怎么了?

回答:

每次迁移都在事务内部。在PostgreSQL中,你不得在一个事务中更新表然后更改表模式。

你需要拆分数据迁移和架构迁移。首先使用以下代码创建数据迁移:

 for sender in orm['fooapp.EmailSender'].objects.filter(footer=None):

sender.footer=''

sender.save()

然后创建架构迁移:

manage.py schemamigration fooapp --auto

现在,你有两个事务,并且应该在两个步骤中进行迁移。

以上是 Django-DB-Migrations:无法更改表,因为它具有未决的触发事件 的全部内容, 来源链接: utcz.com/qa/414558.html

回到顶部