From 588dc86d1b9ae76e2db614d9f2798b2f7fc1182b Mon Sep 17 00:00:00 2001 From: Daniel Gaspar Date: Sun, 15 Oct 2023 17:54:31 +0100 Subject: [PATCH 1/2] fix: WTForms compat with 3.1.0 --- flask_appbuilder/fields.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/flask_appbuilder/fields.py b/flask_appbuilder/fields.py index 001ed42553..aaa03c9453 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: From 005dfdfecb9b77a9d8edf03323dcb002995f5142 Mon Sep 17 00:00:00 2001 From: Daniel Gaspar Date: Sun, 15 Oct 2023 18:00:12 +0100 Subject: [PATCH 2/2] fix for multiple also --- flask_appbuilder/fields.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/flask_appbuilder/fields.py b/flask_appbuilder/fields.py index aaa03c9453..050f64ded9 100644 --- a/flask_appbuilder/fields.py +++ b/flask_appbuilder/fields.py @@ -213,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)