Django不可变模型查询

时间:2015-05-13 12:20:28

标签: python django

我正在查看Django(1.6)中的状态隔离/只读情况,我正在寻找一种方法来使查询返回不可变的对象。

我正在寻找适合以下包装通常的db atomicity api

的东西
MyModel.objects.filter(foo="bar").all(read_only=True)

我目前的想法是这将是一个自定义管理器,但我可能喜欢可以在运行时添加的东西,如:

read_only(MyModel.objects.filter(foo="bar").all())

没有太多伏都教或使它们不受管理(在状态改变上抛出异常的选项会很好)。

关键是模型支持只读和默认读写查询类型,理想情况下,更改仅限于需要为只读的代码。

我的另一个选择是:

with isolation(raise_exception=True):
    m = MyModel.objects.get(id=foo)
    m.do_unknown_thing_that_may_mutate()

我是否存在比数据库更高级别的现有解决方案?

1 个答案:

答案 0 :(得分:1)

一种可能性是定义一个代理类,它将save覆盖为无操作:

class MyReadOnlyModel(MyModel):
    def save(self, *args, **kwargs):
        pass
    class Meta:
        proxy = True

然后只查询MyReadOnlyModel而不是MyModel。