django db在管理站点中运行时写入不会立即发生

时间:2009-06-14 13:52:27

标签: database django admin

我在Django应用程序中有一段这样的代码

def update_account(user_account,add_widget_count):
    user_account.add_widgets(add_widget_count)
    user_account.save()

    notify_other_system_about_account_update(user_account)

当我将此作为我的应用程序的一部分运行时,一切都很好。特别是,当我的其他系统(django外部)获得通知时,它会检查数据库,并更新小部件计数。

但是,当我从管理网站运行上述代码时,存在问题。当我的其他系统收到通知时,它不会在数据库中看到更新的值。我通过放置一个断点并检查数据库来确认,并且在调用.save()之后它没有得到更新 - 在非管理员站点调用中,当我在此断点期间检查时更新数据库。只有在我让应用程序运行之后,数据库才会更新。

django管理中间件是否在进行某种延迟或延迟数据库写入?

更新

我甚至将调用notify_other_system_about_account_update(user_account)移到了UserAccount对象上的post_save信号处理程序。信号会发射,但是当我得到它时。我的信号处理程序返回后,数据库在某个时刻更新。只有在管理网站内运行时才会出现此问题。

1 个答案:

答案 0 :(得分:4)

我发现了这个问题。 django管理员使用视图范围的数据库事务。我需要在通知外部系统之前手动提交事务