0

次のように作成されたフォームモデルがあります。

from plone.app.directives import Form

class IFormSchema(form.Schema):

    foobar = schema.Bool(title=u"Just another field")

この定義に対してアダプターを登録したいのですが:

@component.adapter(IFormSchema)
@interface.implementer(ITreeSelectURLProvider)
def TreeSourceURL():
    """
    """
    return "http://foobar"

登録は正しく行われます。

z3c.formただし、IFormSchemaが処理チェーンの任意のポイントのオブジェクトによって直接提供されているかどうかわからないという問題があるため、次のように呼び出すことができます。

 provider = ITreeSelectURLProvider(someObject)
  • IFormSchemaは、z3c.formまたはplone.autoformチェーンの任意のポイントのオブジェクト(zope.interface.directlyProvides?)に直接適用されますか?

  • そうでない場合、モデルに対してアダプターを登録できるようにするための推奨される方法は何ですか?このインターフェイスを実装するには、どのクラスを作成する必要がありますか?

さらに悪いことに、質問のコンテキストは実際のコンテンツアイテムではなく、サブフォームオブジェクトです。

4

1 に答える 1

2

器用さは、スキーマ インターフェイス (ファイル システムで定義され、FTI で参照されるもの、または Web または XML ファイルで定義されるもの) がコンテンツ タイプのインスタンスによって提供されることを確認します。

これはフォームの問題ではなく、器用さの問題です。form.Schema 基本クラスは、Interface を拡張する単なるマーカーであり、構成時に plone.autoform の処理の一部を実行できるようにします。

于 2012-09-21T11:49:50.573 に答える