我正在查看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()
我是否存在比数据库更高级别的现有解决方案?
答案 0 :(得分:1)
一种可能性是定义一个代理类,它将save
覆盖为无操作:
class MyReadOnlyModel(MyModel):
def save(self, *args, **kwargs):
pass
class Meta:
proxy = True
然后只查询MyReadOnlyModel而不是MyModel。