我需要在Plone控制面板中构建一个存储配对的配置面板,我想在Plone 3上使用plone.app.registry。
如果我将自己限制在用户界面,那么定义一个自动构建它的模式接口非常简单:
class IMyPair(Interface):
value = schema.TextLine(title=u"value", required=True)
title = schema.TextLine(title=u"title", required=False)
class MyPair(object):
implements(IMyPair)
def __init__(self, value='', title=''):
self.value = value
self.title = title
class IMyConfigPanel(Interface):
entry = schema.List(
title=_(u'Foo'),
value_type=schema.Object(IMyPair, title=u"entry"),
required=True
)
我们使用这是一个项目,它将portal_properties中的耦合存储为单个字符串(带分隔符)。
在plone.app.registry中使用这种方法(带有“value_type = schema.Object”)我得到一个例外,因为IObjectField没有定义IPersistent适配器。
在深入并变得疯狂提供我自己的适配器之前:有一种更简单的方法来满足我的问题的初始需求?
答案 0 :(得分:1)
您应该重新阅读plone。(app。)注册表文档,尤其是“持久字段”的plone.registry文档。
并非所有zope.schema类型都受支持,对于其中一些类型,您需要使用plone.registry.field中的持久变体。通常,Python中不是原始类型的任何东西(int,unicode,float等)都需要特殊处理。即使稍后从文件系统中删除了提供某些设置的加载项,这也是保持注册表工作的有意设计选择。
在plone.app.registry文档的基础文档和GenericSetup示例中都有使用plone.registry.field.Tuple
的示例。