0

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

为了获得我的管理路径,我有一个连接到根的节点。on __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. 它将从管理员根或真正的根输出。

我希望这种矫揉造作永远不会被挽救。

4

1 回答 1

0

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

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

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

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

于 2012-11-16T21:41:30.717 回答