关于python:只读Django对象管理器?

Read-only Django object manager?

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

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

有什么建议?


我在考虑两种方法。

  • 创建自定义管理器,覆盖_insert()_update()以引发异常/记录查询,并使用get_query_set()返回覆盖create()get_or_create()update()的自定义QuerySet。

  • 如果您正在使用django 1.2,请在settings.py中创建另一个数据库连接,将其命名为"READ_ONLY",并创建一个使用该连接返回QuerSet的自定义管理器(如def get_query_set() return super(ReadOnlyManager, self).get_query_set().using("READ_ONLY"),并将连接标记为只读。(单向 要做到这一点是为数据库连接创建只读用户"READ_ONLY" ....如果您正在使用Postgres,您可以执行诸如如何在PostgreSQL中创建只读用户的操作?)