只读Django对象管理器?

时间:2010-12-20 20:00:19

标签: python django

我正在进行激进的缓存,我想确保没有人意外地编写直接更新数据库的代码。我想,解决这个问题的方法是重命名正常的对象管理器.rw_objects以便缓存使用,并将.objects替换为在非更新访问时记录警告的管理器并抛出例如,如果有人试图从中进行更新。

我编写了一个对象管理器和一个查询集但是我不确定如何检查查询是否正在更新数据库。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我在考虑两种方法。

  1. 创建自定义管理器,覆盖_insert()_update()以引发异常/记录查询,并get_query_set()返回覆盖create()的自定义QuerySet,{ {1}}和get_or_create()

  2. 如果您正在使用django 1.2,请在update()中创建另一个数据库连接,将其命名为settings.py,然后创建一个使用该连接返回QuerSet的自定义管理器(如"READ_ONLY" ,并将连接标记为只读。(一种方法是为数据库连接创建只读用户def get_query_set() return super(ReadOnlyManager, self).get_query_set().using("READ_ONLY") ....如果您正在使用Postgres,您可以执行{{3}之类的操作})