私は、現在静的な音声を使用している、のフォームを持っていSelectFieldWidget
ます。これは基本的に次のとおりです。
from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
primary_contacts = SimpleVocabulary([
SimpleTerm( unicode(token), title=unicode(token.upper()), token=token ) for token in [
'one','two','three','four','five','six','seven','eight','nine','ten',
]
])
語彙は、フォームスキーマのフィールドに割り当てられます。
form.widget( primary_contact_person=SelectFieldWidget )
primary_contact_person = schema.List(
title = u'Nominate Primary Contact',
required = False,
value_type = schema.Choice(
vocabulary=primary_contacts,
)
)
次に、スキーマはフォームを使用してplone.supermodel
シリアル化され、フォームで必要な場合は逆シリアル化されます(これは別の要件のためです)。
フォームはカスタムの手書きテンプレートを使用しておりtal
、選択フィールドオプションを生成するためのステートメントを追加しているところです。フォーム上のウィジェットを参照することでこれを実行できると思っていましたが、実行すると問題が発生します。
(Pdb) self # break point in form
<Products.Five.metaclass.edit_metadata object at 0xc1ce450>
(Pdb) select = self.widgets['primary_contact_person']
(Pdb) first = [t for t in select.terms][0]
(Pdb) first.token
'one'
(Pdb) first.value
u'one'
(Pdb) first.title
(Pdb)
タイトルはNone
、ウィジェットからアクセスした場合の用語です。私は語彙を通してそれを調べてみました:
(Pdb) select.terms.getTermByToken('one').title
(Pdb)
しかし、繰り返しますが、それはNone
です。ただし、元の語彙オブジェクトには次の用語が含まれています。
(Pdb) from my.package import primary_contacts
(Pdb) [t for t in primary_contacts][0].title
u'ONE'
したがって、ソースの語彙オブジェクトを直接使用してテンプレートに必要な値を提供することもできますが、この語彙は最終的に動的になる予定です。その時点で、ウィジェット自体に問い合わせる必要があると思います。
ここで何が間違っているのですか、なぜタイトルが定義されていないのですか?