由 post_save 信号执行的 Django 代码发生在原子事务中

标签 django transactions signals django-1.6

升级到 Django 1.6 在我的代码中引入了一个棘手的问题:由 post_save 信号触发的数据库操作包含在 与 transaction.atomic(): Django 的 get_or_create() block 。

对我的影响是自定义 SQL(非托管)没有及时提交到数据库。

是否有一个不同的信号可供我使用,在 obj.save() 退出其原子 block 之后发送?

还是我诊断错了?

最佳答案

Django 的 get_or_create() 在原子 block 中执行其 save(),并且 post_save 触发的信号嵌套在该原子 block 内。

我的解决方法是在自定义管理器中使用我自己的版本覆盖 native get_or_create(),而不使用 transaction.atomic() block 。

关于由 post_save 信号执行的 Django 代码发生在原子事务中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21741893/

相关文章:

python - 在托管应用程序中使用 Selenium ?

python - 如何在 apache 上配置 django 并在 apache 中创建 https 以便 django url 应使用 https ://<ip>:80 port 打开

java - 每次调用 JDBC commit() 是否隐式标记事务 block 的开始?

qt - 明确设置值时抑制 Qt 信号的正确方法是什么

c++ - Visual C++ 2015 中的 SIGINT 处理程序重置

html - 为什么在 django 中使用 xhtml2pdf 呈现为 pdf 时,html 表中的某些列会崩溃?

python - 为什么列的默认值不适用于 django

python - 如何管理查询中的并发?

java - 一致性和容器管理的事务

unix - 信号在unix中什么时候被处理?