Ошибка getMultiadapter с пользовательской формой EditForm в ловкости plone 4.2

Я пытаюсь открыть пользовательскую форму редактирования, которая будет отображать только одно поле из формы с 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.

все работает нормально, пока я не доберусь до поля, которое является выбором списка MultiField:

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

(это запись в форме.Схема):

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')

person Don Keillor    schedule 06.06.2013    source источник
comment
странно, кажется, что типы полей не позволяют его скрыть.   -  person vangheem    schedule 11.06.2013
comment
странно, я не продвинулся :(   -  person Don Keillor    schedule 11.06.2013
comment
так что до сих пор нет прогресса, кажется, это просто ошибка, я полагаю, я не выясню, как сообщить об этом, и если я получу исправление, я дам вам всем знать :)   -  person Don Keillor    schedule 16.07.2013


Ответы (2)


Я столкнулся с точно такой же проблемой и не знаю, есть ли исправление или обходной путь, но если порядок не имеет значения, вы можете попробовать schema.Set (или schema.FrozenSet) вместо schema.List. Все это позволяет вам выбрать несколько вариантов. Я протестировал варианты Set, и они оба работают с mode как 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'>

упорядоченный выбор: позволяет выбрать одно или несколько значений из набора заданных параметров и отсортировать эти параметры.

person Nick Bragan    schedule 26.08.2013
comment
спасибо за эти предложения Ник. я не нашел обходного пути и перешел к другой части моей программы (поскольку это была мелочь). на данный момент я посмотрю, подходят ли они для программы! Благодарность! - person Don Keillor; 04.09.2013

Похоже, вы неправильно указываете словарь. Пожалуйста измените

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

to

schema.Choice(vocabulary="test.siteContact")
person vangheem    schedule 10.06.2013
comment
привет @vangheem, это изменение не имело значения. я все еще получаю ту же ошибку, когда я вызываю пользовательскую форму редактирования. - person Don Keillor; 11.06.2013