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

时间:2014-02-12 23:08:32

标签: django transactions signals django-1.6

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

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

obj.save()退出原子块之后,是否有一个我可以使用的信号

或者我确诊错了?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

为了使信号正常运行,你需要退出原子事务,因为在没有数据库提交的情况下拍摄transsaccion信号。