0

LinguaPlone uses the MultiSelect widget for selecting multiple languages. Something like an InOut widget or even a MultiCheckBox widget will be a better user interface as it is hard to see all the selected languages from a long list.

I tried to override the FormFields using:

form_fields['available_languages'].custom_widget = MultiCheckBoxWidget

as suggested in the zope.formlib docs, but am getting a traceback as follows:

Traceback (innermost last):
  Module ZPublisher.Publish, line 128, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 48, in call_object
  Module zope.formlib.form, line 795, in __call__
  Module five.formlib.formbase, line 50, in update
  Module zope.formlib.form, line 758, in update
  Module plone.fieldsets.form, line 30, in setUpWidgets
  Module zope.formlib.form, line 402, in setUpEditWidgets
  Module zope.formlib.form, line 334, in _createWidget
TypeError: __init__() takes exactly 4 arguments (3 given)

How can I override the default widget?

SteveM
  • 6,058
  • 1
  • 16
  • 20
sureshvv
  • 4,234
  • 1
  • 26
  • 32

1 Answers1

0

What you need is:

from zope.formlib.widgets import OrderedMultiSelectWidget
from Products.LinguaPlone.browser.controlpanel import LanguageControlPanel

def MyMultiCheckBoxWidget(field, request):
    return OrderedMultiSelectWidget(field, field.value_type.vocabulary, request)


LanguageControlPanel.form_fields["available_languages"].custom_widget = MyMultiCheckBoxWidget
sureshvv
  • 4,234
  • 1
  • 26
  • 32