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