在plone.app.registry中存储字符串对

时间:2012-06-29 12:20:44

标签: plone zope.interface

我需要在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适配器。

在深入并变得疯狂提供我自己的适配器之前:有一种更简单的方法来满足我的问题的初始需求?

1 个答案:

答案 0 :(得分:1)

您应该重新阅读plone。(app。)注册表文档,尤其是“持久字段”的plone.registry文档。

并非所有zope.schema类型都受支持,对于其中一些类型,您需要使用plone.registry.field中的持久变体。通常,Python中不是原始类型的任何东西(int,unicode,float等)都需要特殊处理。即使稍后从文件系统中删除了提供某些设置的加载项,这也是保持注册表工作的有意设计选择。

在plone.app.registry文档的基础文档和GenericSetup示例中都有使用plone.registry.field.Tuple的示例。