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

pro*_*ble 3 django signals transactions django-1.6

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

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

是否有一个不同的信号,我可以使用它退出原子块 发送obj.save()

或者我诊断出这个错误?

pro*_*ble 5

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

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