私のPloneサイトの1つでは、文字を生成するために使用するいくつかの器用さのモデルがあります。モデルは、「モデル」(文字の基本内容)、「連絡先」(名前、住所などの連絡先情報を含む)、「マージ」(レンダリングされたモデルオブジェクトです。受信者情報を含むモデルの一部)。 オブジェクトの「マージ」のスキーマ以下の通りです:Plone and Dexterity: "relation"フィールドのデフォルト値
class IMergeSchema(form.Schema):
"""
"""
title = schema.TextLine(
title=_p(u"Title"),
)
form.widget(text='plone.app.z3cform.wysiwyg.WysiwygFieldWidget')
text = schema.Text(
title=_p(u"Text"),
required=False,
)
form.widget(recipients=MultiContentTreeFieldWidget)
recipients = schema.List(
title=_('label_recipients',
default='Recipients'),
value_type=schema.Choice(
title=_('label_recipients',
default='Recipients'),
# Note that when you change the source, a plone.reload is
# not enough, as the source gets initialized on startup.
source=UUIDSourceBinder(portal_type='Contact')),
)
form.widget(model=ContentTreeFieldWidget)
form.mode(model='display')
model = schema.Choice(
title=_('label_model',
default='Model'),
source=UUIDSourceBinder(portal_type='Model'),
)
新しい「マージ」オブジェクトを作成するとき、私は「受信者」フィールドはどこに新しいフォルダで利用可能なすべての連絡先をプリセットすることがしたいですオブジェクトが作成されます。 私はMartin Aspelliのガイドに従ってフィールドのデフォルト値を追加しました:http://plone.org/products/dexterity/documentation/manual/developer-manual/reference/default-value-validator-adaptors
これはテキスト入力フィールドでは問題ありませんが、「受信者」フィールドでは機能しません。デフォルト値を生成するための方法は以下の通りである(醜いプリントといくつかのデバッグ情報を持つが、彼らは後に削除されます;)):
@form.default_value(field=IMergeSchema['recipients'])
def all_recipients(data):
contacts = [x for x in data.context.contentValues()
if IContact.providedBy(x)]
paths = [u'/'.join(c.getPhysicalPath()) for c in contacts]
uids = [IUUID(c, None) for c in contacts]
print 'Contacts: %s' % contacts
print 'Paths: %s' % paths
print 'UIDs: %s' % uids
return paths
私は、直接それらの相対的なパスをオブジェクトを返すようにしようとした(中追加ビューは "self.widgets ['recipient']。value"にアクセスするときに、このタイプのデータを取得します)UIDですが、何の効果もありません。
リストやジェネレータの代わりにタプルを返そうとしましたが、まったく効果がありません。
このメソッドは、インスタンスログにトレースが表示されるので、確実に呼び出されます。