1

カップルを保存する構成パネルをPloneコントロールパネルに構築する必要があり、Plone3で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アダプターが定義されていないため、例外が発生します。

深く掘り下げて自分のアダプターを提供することに夢中になる前に、問題の最初のニーズに到達するためのより簡単な方法はありますか?

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 に答える