Django:通过添加 m2m 导致“当前事务被中止,命令被忽略,直到事务块结束”

Posted

技术标签:

【中文标题】Django:通过添加 m2m 导致“当前事务被中止,命令被忽略,直到事务块结束”【英文标题】:Django: Added m2m via through causes 'current transaction is aborted, commands ignored until end of transaction block' 【发布时间】:2013-08-29 08:09:44 【问题描述】:

我正在尝试通过直通表添加 m2m 关系,但出乎意料的是,我遇到了以下错误:

'当前事务被中止,命令被忽略直到事务块结束'

关于这个有两个奇怪的问题。首先是,我已经成功迁移/同步了我所有的相关应用程序。第二个是关联模型和有问题的模型(AddedFeature)即使抛出错误也成功保存到数据库中。也就是说,即使事务被中止,AddedFeature 实例也会保存到数据库中。

http://dpaste.com/1357120/

重申一下 - 刷新我的数据库并重新迁移/重新同步并没有帮助解决问题。

【问题讨论】:

关闭你的debug_toolbar,看看它是否会改变异常信息。 成功了!我不知道为什么以及如何解决它。 这是因为您的部分代码在事务管理下引发了您未处理的异常(通过将事务回滚到保存点),稍后当中间件处理响应时,它涉及 django_toolbar 中间件在您的代码中止的事务期间执行 sql 查询,从而引发您遇到的异常。这是一个很长的句子:O 【参考方案1】:

查找在此错误之前发生的问题。您的代码或您正在使用的代码忽略了数据库错误。所以接下来的操作失败了。

您需要查看数据库和/或应用程序日志来查找之前的问题。然后确定您的应用程序代码的哪一部分正在吞噬数据库异常而不记录它并中止事务。

postgresql.conf 中设置log_statement = 'all' 对此很有用。

【讨论】:

以上是关于Django:通过添加 m2m 导致“当前事务被中止,命令被忽略,直到事务块结束”的主要内容,如果未能解决你的问题,请参考以下文章

Django - 删除 M2M 字段但保留连接表

Unhashable 类型:尝试在 Django 中使用 post_save 动态添加 m2m 关系时出现“列表”错误

Django:通过模型实例化M2M

Django 通过查询相关表来访问 M2M 字段的属性

Django m2m 表单保存“通过”表

通过 m2m 关系的直通表的值过滤 django 查询集