Пример #1
0
def fixAjaxSelectWidgetDisplayMode(event):
    if (isinstance(event.widget, AjaxSelectWidget) and
            event.widget.mode == DISPLAY_MODE and event.widget.vocabulary):
        # Sanity check
        field = getattr(event.widget, 'field', None)
        if ICollection.providedBy(field):
            field = field.value_type
        if field is None or not getattr(field, 'vocabularyName', None):
            # Field doesn't know its vocabulary and SelectWidget cannot be used
            return
        # This is crazy! AjaxSelectWidget is based on select widget and
        # therefore has completely wrong display mode; Here we replace
        # the widget with SelectWidget, but is it really this hard?
        tmp = FieldWidget(
            event.widget.field,
            SelectWidget(event.widget.request),
        )
        # Do what they do in z3c.form.field update
        tmp.name = event.widget.name
        tmp.id = event.widget.id
        tmp.context = event.widget.context
        tmp.form = event.widget.form
        alsoProvides(tmp, IContextAware, IFormAware)
        tmp.ignoreContext = event.widget.ignoreContext
        tmp.ignoreRequest = event.widget.ignoreRequest
        tmp.showDefault = event.widget.showDefault
        tmp.mode = event.widget.mode
        event.widget.__class__ = SelectWidget
        event.widget.__dict__ = tmp.__dict__
        event.widget.update()