From ff9c32d03200bfebf70d04108ab373b509fc0f9b Mon Sep 17 00:00:00 2001 From: Chiruzzi Marco Date: Wed, 27 Mar 2024 17:51:28 +0100 Subject: [PATCH] Fix select2 widgets rendering empty values in display mode when called from an easyform action --- src/collective/easyform/browser/view.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/collective/easyform/browser/view.py b/src/collective/easyform/browser/view.py index 92efc352..055248ee 100644 --- a/src/collective/easyform/browser/view.py +++ b/src/collective/easyform/browser/view.py @@ -184,10 +184,23 @@ def setErrorsMessage(self, errors): self.widgets[field].error = view self.status = self.formErrorsMessage + def fix_select2_widgets(self): + # Plone Select widgets store values as strings, but + # the display widget expects the extracted list, + # so we need to fix the request form data here + # before actions are triggered. + for name, widget in self.widgets.items(): + is_select = ISelectWidget.providedBy(widget) + if is_select: + request_value = self.request.form.get("form.widgets.{}".format(name)) + if request_value and isinstance(request_value, six.string_types): + self.request.form["form.widgets.{}".format(name)] = (request_value,) + @button.buttonAndHandler( PMF(u"Submit"), name="submit", condition=lambda form: not form.thanksPage ) def handleSubmit(self, action): + self.fix_select2_widgets() unsorted_data, errors = self.extractData() if errors: self.status = self.formErrorsMessage @@ -402,7 +415,6 @@ def form_name(self): if self.context.nameAttribute: return self.context.nameAttribute return None - def getOnDisplayOverride(self): """Evaluate form setup script TALES expression stored in the