我要从文本字段中删除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: column "footer" contains null values
我将此添加到架构迁移:
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
怎么了?
刚刚碰到这个问题。您还可以在架构迁移中使用db.start_transaction()和db.commit_transaction(),将数据更改与架构更改分开。可能不太干净,无法进行单独的数据迁移,但在我的情况下,我需要模式、数据,然后再进行另一个模式迁移,因此我决定一次完成所有迁移。
每次迁移都在事务中。在PostgreSQL中,不能更新表,然后在一个事务中更改表架构。
您需要分离数据迁移和模式迁移。首先使用以下代码创建数据迁移:
然后创建架构迁移:
现在您有两个事务,两个步骤中的迁移应该可以工作了。
另一个原因可能是您试图将一个列设置为
NOT NULL
,而实际上它已经有NULL
个值。相关问题 更多 >
编程相关推荐