Zodb可以防止自动保存字段

时间:2012-11-16 21:31:05

标签: python pyramid zodb

我有一个让我担心的问题。我有一个应用程序几乎只与遍历工作。

为了获得我的管理路径,我有一个连接到根的节点。在__getitem__上,它返回parent.__getitem__这是我的实际根。我的观点有containment。我可以检查是否包含此管理节点。

重新启动时会出现问题。当我这样做时

class AdminRoot(object):

    __acl__ = [
                (Allow, 'g:admin', ALL_PERMISSIONS),
                (Deny, 'system.Everyone', ALL_PERMISSIONS),
              ]

    def __init__(self, parent, name):
        self.__parent__ = parent
        self.__name__ = name

    def __getitem__(self, name):
        item = Mapping.__getitem__(self.__parent__, name)
        item.__parent__ = self                                                                                                                                                              
        return item

selfitem.__parent__影响时。它有时会保存为父节点。出于这个原因,在做request.resource_url时。它将从admin root或real root输出。

我希望这种做法从未得到保存。

1 个答案:

答案 0 :(得分:0)

每当您在Persistent对象上设置属性时,它都会被保存到ZODB(前提是没有异常触发事务中止)。

在ZODB中,对象实际上应该只有一个父对象,因此只有一个规范URL。建议您不要尝试使这些对象看起来有多个网址,至少不要通过操纵__parent__属性。

相反,您应该提供__resource_url__()方法来代替提供替代网址。您可以使用volatile属性在对象上存储非持久性信息,以便使用这种方法。

易失性属性是以_v_开头的任何属性,并且被持久性引擎忽略。