ZODBでは、すぐに使用できる順序付きdict実装を使用できますが、親オブジェクト(順序付きdictインスタンスを参照するオブジェクト)を変更するparent = odict_instance
たびに、またはを使用して変更済みとしてマークする必要があります。に設定_p_changed
しTrue
ます。もちろん、これにより、順序付けられたdictインスタンスとともに親の新しい永続レコードが作成されます。
順序付けられたdictインスタンス自体が変更を自動的に検出するようにしたい場合は、現在の実装を認識していないため、おそらく独自のクラスを作成する必要があります。とは言うものの、特にZODBPersistentMapping
クラスを、同じものの順序付けされたバージョンを構築する方法のテンプレートとして使用する場合は、そうするのはおそらく非常に簡単です。super()
残念ながら、そのクラスは呼び出しを使用する代わりにUserDictメソッドを直接参照するため、ミックスインとして使用することはできません(persistent.Persistent
新しいスタイルのクラスではありません)。
Python 2.7には、標準ライブラリに順序付けられたdictクラスがあります。おそらくあなたはまだPloneでPython2.6を使用しているので、それをバックポートする必要があります。ただし、バックポートを取得したら、実装はソースコードPersistentOrderedDict
からの直接コピーであり、すべてのインスタンスがOrderedDictポートに置き換えられます。PersistentMapping
UserDict.IterableUserDict