1

我需要在存储情侣的 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 中的情侣作为单个字符串(带有分隔符)存储。


使用这种方法(使用“value_type=schema.Object”)和 plone.app.registry 我得到一个异常,因为 IObjectField 没有定义 IPersistent 适配器。

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

4

1 回答 1

1

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

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

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

于 2012-07-01T17:00:32.547 回答