django.db.utils.OperationalError: cannot ALTER TABLE because it has pending trigger events
django.db.utils.OperationalError: cannot ALTER TABLE because it has pending trigger events
我正在尝试将 accepted_answer
ForeignKey 更改为 BooleanField,但在迁移时出现错误 django.db.utils.OperationalError: cannot ALTER TABLE "forum_thread" because it has pending trigger events
。这是之前的models.py
:
class Thread(models.Model):
title = models.CharField(max_length=300)
answer_count = models.PositiveIntegerField(default=0)
added_at = models.DateTimeField(auto_now_add=True)
accepted_answer = models.ForeignKey('forum.Post', null=True, blank=True, related_name='+')
尝试在一次操作中更新和更改同一 table 的架构时似乎会发生此错误。
例如,在从字段中删除 null=True
时 makemigrations
提示提供新的默认值后,似乎会出现此错误,因为 Django 试图在更新列的同时更改可空性。
解决方法,视情况而定:
- 最简单的通常是添加具有所需属性的新字段,然后删除旧字段(可能在复制数据之后)。
- 如果可以通过为所有需要新默认值的字段设置值(Django 在迁移期间询问)来避免错误,请尝试在进行 migration/schema 更改之前设置这些值。
在您的具体情况下,添加新字段然后删除旧字段可能是可行的方法。
我正在尝试将 accepted_answer
ForeignKey 更改为 BooleanField,但在迁移时出现错误 django.db.utils.OperationalError: cannot ALTER TABLE "forum_thread" because it has pending trigger events
。这是之前的models.py
:
class Thread(models.Model):
title = models.CharField(max_length=300)
answer_count = models.PositiveIntegerField(default=0)
added_at = models.DateTimeField(auto_now_add=True)
accepted_answer = models.ForeignKey('forum.Post', null=True, blank=True, related_name='+')
尝试在一次操作中更新和更改同一 table 的架构时似乎会发生此错误。
例如,在从字段中删除 null=True
时 makemigrations
提示提供新的默认值后,似乎会出现此错误,因为 Django 试图在更新列的同时更改可空性。
解决方法,视情况而定:
- 最简单的通常是添加具有所需属性的新字段,然后删除旧字段(可能在复制数据之后)。
- 如果可以通过为所有需要新默认值的字段设置值(Django 在迁移期间询问)来避免错误,请尝试在进行 migration/schema 更改之前设置这些值。
在您的具体情况下,添加新字段然后删除旧字段可能是可行的方法。