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

オブジェクトに属性を設定すると、必ずPersistentZODB に保存されます (例外がトランザクションの中止をトリガーしなかった場合)。

ZODB では、オブジェクトは実際には親を1 つだけ持つ必要があるため、正規 URL を 1 つだけ持つ必要があります。少なくとも__parent__属性を操作することによって、そのようなオブジェクトが複数の URL を持っているように見せようとすることはお勧めしません。

__resource_url__()代わりに、代わりの URL を提供する方法を提供する必要があります。おそらく、揮発性属性を使用して、オブジェクトに関する非永続的な情報を保存し、そのようなメソッドを使用することができます。

揮発性属性は で始まる任意の属性で_v_あり、永続化エンジンによって無視されます。

于 2012-11-16T21:41:30.717 に答える