我想从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中,你不得在一个事务中更新表然后更改表模式。
你需要拆分数据迁移和架构迁移。首先使用以下代码创建数据迁移:
然后创建架构迁移:
现在,你有两个事务,并且应该在两个步骤中进行迁移。
造成这种情况的另一个原因可能是因为您尝试将一列设置为NOT NULL实际上已经具有NULL值的时间。