ZODB相当于有序的dict(odict?)

Mik*_*maa 3 python zope plone zodb

我正在做一些PloneFormGen的工作.目前,PloneFormGen在内部输入表单条目作为元组,没有关联的列信息.如果添加了新列(表单字段),则现有数据将变为无效.

这可以很容易地避免将数据存储在有序字典中,这些字典保留了输入的列顺序和列ID.

ZODB是否具有与有序字典等效的数据类型?如果可能,即使使用匹配的API(Python dict-like项操作和访问)?

Mar*_*ers 5

您可以在ZODB中使用现成的任何有序dict实现,但是您必须使用parent = odict_instance每次更改或者每次更改标记父对象(引用有序dict实例的对象).通过设置_p_changedTrue.当然,这将导致父级的新持久记录以及有序的dict实例.

如果您希望有序的dict实例本身自动检测更改,您可能必须构建自己的类,因为我不知道任何当前的实现.也就是说,这样做可能非常容易,特别是如果您使用ZODBPersistentMapping类作为模板来构建相同的有序版本.不幸的是,你不能将该类用作mixin,因为它直接引用UserDict方法而不是使用super()调用(persistent.Persistent不是新式类).

Python 2.7在标准库中有一个有序的dict类.据推测,你仍然在Plone中使用Python 2.6,所以你必须向后移植它.但是,一旦你向后移植了它,一个PersistentOrderedDict实现应该是PersistentMapping源代码的直接副本,所有实例都UserDict.IterableUserDict用你的OrderedDict端口替换.