[Zope3-dev] problems with <browser:widget>

Adam Groszer adamg at fw.hu
Fri Aug 26 09:23:59 EDT 2005


Dear Dominik,

I implemeted what you told me, but I'm still out of luck.
(The szerep/szemely mistake as noticed by Dylan Reinhardt was mine,
but you got the real problem.

class ISzemely(Interface):
...
    szerepek = List(
        title=u"Hozzarendelt szerepek",
        description=u"Hozzarendelt szerepek",
        required=False,
        value_type=Choice(vocabulary="szerep")
        )
)

helper.py:
from zope.app.form import CustomWidgetFactory
from zope.app.form.browser import OrderedMultiSelectWidget

OrderedMultiSelectWidget_factory = CustomWidgetFactory(OrderedMultiSelectWidget)

configure.zcml:
...
  <browser:addform
      schema="szscreen.interfaces.ISzemely"
      content_factory="szscreen.app.Szemely"
      label="Uj Szemely"
      name="AddSzemely.html"
      permission="zope.ManageContent"
      set_before_add="name"
          >
          <browser:widget field="szerepek" class=".helper.OrderedMultiSelectWidget_factory"/>
  </browser:addform>
...

The exception is a little bit different, but the end result is the
same.

...
  Module zope.interface.adapter, line 481, in queryMultiAdapter
    return factory(*objects)
  Module zope.app.form.browser.editview, line 64, in __init__
    self._setUpWidgets()
  Module zope.app.form.browser.add, line 49, in _setUpWidgets
    setUpWidgets(self, self.schema, IInputWidget, names=self.fieldNames)
  Module zope.app.form.utility, line 153, in setUpWidgets
    context=context)
  Module zope.app.form.utility, line 101, in setUpWidget
    widget = widget(field.bind(context), view.request)
  Module zope.app.form, line 97, in __call__
    instance = self._widget_factory(*args)
  Module zope.app.form, line 97, in __call__
    instance = self._widget_factory(*args)
TypeError: __init__() takes exactly 4 arguments (3 given)

As I checked the worldcookery example it does not use a factory either
and it is working fine.

  
Wednesday, August 24, 2005, 4:01:07 PM, you wrote:

DH> Adam Groszer wrote:

>>I'm having problems with using <browser:widget>.
>>
>>I have an interface:
>>class ISzerep(Interface):
>>    name = TextLine(
>>        title=u"Szerep nev",
>>        description=u"Szerep nev",
>>        required=True
>>        )
>>    szemelyek = List(
>>        title=u"Hozzarendelt szemelyek",
>>        description=u"Hozzarendelt szemelyek",
>>        required=False,
>>        value_type=Choice(vocabulary="szemely")
>>        )
>>
>>If I add a simple add (or edit) form:
>>  <browser:addform
>>      schema="szscreen.interfaces.ISzemely"
>>      content_factory="szscreen.app.Szemely"
>>      label="Uj Szemely"
>>      name="AddSzemely.html"
>>      permission="zope.ManageContent"
>>      set_before_add="name"
>>      >
>>  </browser:addform>
>>everything goes well, an OrderedMultiSelectWidget is displayed in the
>>browser by default for the *szemelyek* field.
>>
>>If I modify the addform configuration by adding the <widget>:
>>  <browser:addform
>>      schema="szscreen.interfaces.ISzemely"
>>      content_factory="szscreen.app.Szemely"
>>      label="Uj Szemely"
>>      name="AddSzemely.html"
>>      permission="zope.ManageContent"
>>      set_before_add="name"
>>      >
>>      <widget field="szerepek"
>> class="zope.app.form.browser.OrderedMultiSelectWidget"/>
>>  </browser:addform>
>>
>>
DH> You cannot register the widget class directly, but you have to provide a
DH> specific widget factory.
DH> Example edit.py within your browser directory:

DH> from zope.app.form import CustomWidgetFactory
DH> from zope.app.form.browser import OrderedMultiSelectWidget

DH> szerepek_widget_factory =
DH> CustomWidgetFactory(OrderedMultiSelectWidget)


DH> Example registration within the configure.zcml:

DH>   <browser:addform
DH>       schema="szscreen.interfaces.ISzemely"
DH>       content_factory="szscreen.app.Szemely"
DH>       label="Uj Szemely"
DH>       name="AddSzemely.html"
DH>       permission="zope.ManageContent"
DH>       set_before_add="name"
DH>       >
DH>       <widget field="szerepek"
DH> class=".edit.szerepek_widget_factory"/>
DH>   </browser:addform>

DH> Regards,
DH> Dominik


-- 
Best regards,
 Adam                            mailto:adamg at fw.hu
--
Quote of the day:
A certain amount of opposition is a great help to a man. Kites rise against, not with the wind. 
- John Neal 



More information about the Zope3-dev mailing list