我有一個SelectFieldWidget
一種形式,目前正在使用一個靜態vocabularly,這基本上是這樣的:SimpleTerm標題未設置
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'
因此,雖然我可以直接使用源翻譯對象提供的值模板的需求,該計劃是爲這個詞彙最終是動態的,在這一點上,我希望我需要審查小部件本身。
我在做什麼錯在這裏,爲什麼標題沒有被定義?
這對我來說是一個臭味......唯一能找到的方法可能是通過所有的z3c.form進行一步調試,然後看看進程被*標題* –
旁邊跟蹤的問題根本無法重現您的問題,而不是像你那樣在Python提示符中定義'SimpleVocabulary'。另外,爲了獲得迭代的第一個元素,只需使用'next(select.terms)':-) –
哈,謝謝Martijn,我不知道爲什麼我從來沒有發現過:) –