【问题标题】:django.db.utils.OperationalError: cannot ALTER TABLE because it has pending trigger eventsdjango.db.utils.OperationalError: cannot ALTER TABLE 因为它有挂起的触发事件
【发布时间】:2017-08-06 02:10:07
【问题描述】:

我正在尝试将 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='+')

【问题讨论】:

    标签: django django-models django-migrations


    【解决方案1】:

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

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

    解决方法,视情况而定:

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

    在您的特定情况下,添加一个新字段然后删除旧字段可能是要走的路。

    【讨论】:

    • 添加新字段、迁移和删除旧字段是简单的解决方案。另外,根据我的经验,如果遇到此错误,最好获取一个新数据库,然后重新开始迁移。
    猜你喜欢
    • 2012-10-02
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 2016-04-28
    • 2020-08-10
    • 2011-03-29
    • 2020-09-24
    相关资源
    最近更新 更多