0

LinguaPlone は MultiSelect ウィジェットを使用して複数の言語を選択します。InOut ウィジェットや MultiCheckBox ウィジェットのようなものは、長いリストから選択したすべての言語を確認するのが難しいため、より優れたユーザー インターフェイスになります。

以下を使用して FormFields をオーバーライドしようとしました。

form_fields['available_languages'].custom_widget = MultiCheckBoxWidget

zope.formlib docs で提案されているように、次のようにトレースバックを取得しています:

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)

デフォルトのウィジェットをオーバーライドするにはどうすればよいですか?

4

1 に答える 1

0

必要なものは次のとおりです。

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
于 2013-06-15T07:12:16.577 に答える