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

在plone.app.registry中存储字符串对,plone,zope.interface,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 MyPa

我需要在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_属性中的耦合存储为单个字符串(带分隔符)


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


在更深入、更疯狂地提供我自己的适配器之前:有一种更简单的方法来解决我的问题?

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

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


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

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

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


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

我也切换到schema.Dict类型的字段,但z3c.form目前不支持任何用于此的小部件。萧瑟!非常确定collective.z3cform.datagridfield是一个dict,可以与plone.app.registry一起使用。我也切换到schema.dict类型的字段,但是z3c.form目前不支持任何用于此的小部件。萧瑟!非常确定collective.z3cform.datagridfield是一个dict,可以与plone.app.registry一起使用。Hanno的回复是正确的,但是我发现在plone.app.registry的doctest中有正确的文档,写我的评论太慢了。我找到了用于insize z3c.form.browser模块(参见object.txt)的适当文档。Hanno回复是正确的,但我发现在plone.app.Registry的doctest中的适当文档写我的评论太慢了。我找到了用于insize z3c.form.browser模块的propert文档(请参见object.txt)