0

我正在尝试打开一个自定义编辑表单,它只会显示一个包含 12 个字段的表单中的一个字段:

class EditForm(dexterity.EditForm):
    grok.name('editCustom')
    grok.context(IInfo)

    def updateWidgets(self):
        super(EditForm, self).updateWidgets()
        self.widgets['alps'].mode = 'hidden'
        self.widgets['operationStatus'].mode = 'hidden'

# etc.

一切正常,直到我到达一个多字段列表选择的字段:

        self.widgets['siteContact'].mode = 'hidden'

(这是 form.Schema 中的条目):

siteContact = schema.List(
    title=_(u"Site Contact"),
    description =_(u"Select Site Contacts"),
    value_type=schema.Choice(vocabulary=("test.siteContact")),
    required=False,
)

但是当我尝试访问自定义 EditForm 时,我得到:

  Module z3c.form.widget, line 140, in render
  Module zope.component._api, line 109, in getMultiAdapter
ComponentLookupError: ((<Container at /test/first>, <HTTPRequest, URL=http://localhost:8080/test/first/@@editCustom>, <Products.Five.metaclass.EditForm object at 0x08F9D9F0>, <zope.schema._field.List object at 0x084844B0>, <OrderedSelectWidget 'form.widgets.siteContact'>), <InterfaceClass zope.pagetemplate.interfaces.IPageTemplate>, 'hidden')
4

2 回答 2

1

我遇到了完全相同的问题,不知道现在是否有修复或解决方法,但如果订购无关紧要,您可以尝试schema.Set(or schema.FrozenSet) 而不是schema.List. 这些都可以让您选择多个选项。我已经测试了这些Set选项,它们都可以与modeas一起使用hidden

(1) 套装/冷冻套装

field = zope.schema.Set(
   value_type=zope.schema.Choice(values=(1, 2, 3, 4)),
   default=set([1, 3]) )
widget = setupWidget(field)
widget.update()

widget.__class__
<class 'z3c.form.browser.select.SelectWidget'>

选择小部件:允许您从一组给定选项中选择一个或多个值

(2) 清单

field = zope.schema.List(
value_type=zope.schema.Choice(values=(1, 2, 3, 4)),
    default=[1, 3] )
widget = setupWidget(field)
widget.update()

widget.__class__
<class 'z3c.form.browser.orderedselect.OrderedSelectWidget'>

有序选择:允许您从一组给定选项中选择一个或多个值并对这些选项进行排序。

于 2013-08-26T18:10:14.497 回答
0

看起来您可能错误地指定了词汇表。请更换

schema.Choice(vocabulary=("test.siteContact"))

schema.Choice(vocabulary="test.siteContact")
于 2013-06-10T20:47:58.713 回答