From 56fe5d8074d9b5de4909b0c6bd5b041bd628687c Mon Sep 17 00:00:00 2001 From: Daniel Vaz Gaspar Date: Mon, 16 Oct 2023 11:23:16 +0100 Subject: [PATCH] fix: wtforms compat on 3.1.0 (#2138) * fix: WTForms compat with 3.1.0 * fix for multiple also --- flask_appbuilder/fields.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/flask_appbuilder/fields.py b/flask_appbuilder/fields.py index 001ed4255..050f64ded 100644 --- a/flask_appbuilder/fields.py +++ b/flask_appbuilder/fields.py @@ -2,10 +2,14 @@ import operator +from packaging import version +import wtforms from wtforms import widgets from wtforms.fields import Field, SelectField, SelectFieldBase from wtforms.validators import ValidationError +IS_WTFORMS_LESS_THEN_3_1_0 = version.parse(wtforms.__version__) < version.parse("3.1.0") + class AJAXSelectField(Field): """ @@ -130,10 +134,16 @@ def _get_object_list(self): def iter_choices(self): if self.allow_blank: - yield ("__None", self.blank_text, self.data is None) + if IS_WTFORMS_LESS_THEN_3_1_0: + yield ("__None", self.blank_text, self.data is None) + else: + yield ("__None", self.blank_text, self.data is None, {}) for pk, obj in self._get_object_list(): - yield (pk, self.get_label(obj), obj == self.data) + if IS_WTFORMS_LESS_THEN_3_1_0: + yield (pk, self.get_label(obj), obj == self.data) + else: + yield (pk, self.get_label(obj), obj == self.data, {}) def process_formdata(self, valuelist): if valuelist: @@ -203,7 +213,10 @@ def _set_data(self, data): def iter_choices(self): for pk, obj in self._get_object_list(): - yield (pk, self.get_label(obj), obj in self.data) + if IS_WTFORMS_LESS_THEN_3_1_0: + yield (pk, self.get_label(obj), obj in self.data) + else: + yield (pk, self.get_label(obj), obj in self.data, {}) def process_formdata(self, valuelist): self._formdata = set(valuelist)