我有一个让我担心的问题。我有一个应用程序几乎只与遍历工作。
为了获得我的管理路径,我有一个连接到根的节点。在__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
当self
受item.__parent__
影响时。它有时会保存为父节点。出于这个原因,在做request.resource_url
时。它将从admin root或real root输出。
我希望这种做法从未得到保存。
答案 0 :(得分:0)
每当您在Persistent
对象上设置属性时,它都会被保存到ZODB(前提是没有异常触发事务中止)。
在ZODB中,对象实际上应该只有一个父对象,因此只有一个规范URL。建议您不要尝试使这些对象看起来有多个网址,至少不要通过操纵__parent__
属性。
相反,您应该提供__resource_url__()
方法来代替提供替代网址。您可以使用volatile属性在对象上存储非持久性信息,以便使用这种方法。
易失性属性是以_v_
开头的任何属性,并且被持久性引擎忽略。