升级到Django 1.6已经在我的代码中引入了一个棘手的问题:由post_save
信号触发的数据库操作被包含在
with transaction.atomic():
Django的get_or_create()
块。
对我来说,影响是自定义sql(非托管)没有及时提交到数据库。
在 obj.save()
退出原子块之后,是否有一个我可以使用的信号?
或者我确诊错了?
答案 0 :(得分:5)
Django的get_or_create()
在原子块中执行其save()
,并且发出的信号post_save嵌套在该原子块中。
我的解决方法是在自定义管理器中使用我自己的版本覆盖原生get_or_create()
,而不使用transaction.atomic()
块。
答案 1 :(得分:0)
为了使信号正常运行,你需要退出原子事务,因为在没有数据库提交的情况下拍摄transsaccion信号。