django.db.utils.OperationalError:不能ALTER TABLE“forum_thread”,因为它有待处理的触发事件

时间:2017-03-15 11:08:45

标签: django

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='+')

我正在尝试将accepted_answer ForeignKey更改为BooleanField

前:

accepted_answer = models.BooleanField()

并获得迁移错误“待处理的触发事件错误”。请看一下。

1 个答案:

答案 0 :(得分:2)

尝试在一次操作中更新和更改同一个表的架构时,似乎会发生此错误。

例如,在从字段中删除makemigrationsnull=True提示时提供新的默认值后,似乎出现此错误,因为Django正在尝试更改可空性,同时还更新列。

变通办法,视情况而定:

  • 最简单的方法是添加一个具有所需属性的新字段,然后删除旧字段(可能在复制数据后)。
  • 如果可以通过为需要新默认值的所有字段(Django在迁移期间询问)设置值来避免错误,请尝试在进行迁移/架构更改之前设置这些值。

在您的具体情况下,添加新字段然后删除旧字段可能是最佳选择。