Skip to content

Commit 131980f

Browse files
committed
MultipleField._is_select returns false if data is None
Currently, ModelSelectField Multiple returns Error if field exists but has None value This occur when creating a new item, as the object has not been created on page load. Modified to, QuerySetSelectMultipleField._is_select returns False when the items data selected from is None. Added Test, test_forms .WTFormsAppTestCase .test_modelselectfield_multiple_initalvalue_None
1 parent 89198ea commit 131980f

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

flask_mongoengine/wtf/fields.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def process_formdata(self, valuelist):
106106
self.data = None
107107

108108
def _is_selected(self, item):
109-
return item in self.data
109+
return item in self.data if self.data else False
110110

111111

112112
class ModelSelectField(QuerySetSelectField):

tests/test_forms.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,34 @@ class DogOwner(db.Document):
261261
self.assertTrue(choices[0].checked)
262262
self.assertTrue(choices[1].checked)
263263

264+
def test_modelselectfield_multiple_initalvalue_None(self):
265+
with self.app.test_request_context('/'):
266+
db = self.db
267+
268+
class Dog(db.Document):
269+
name = db.StringField()
270+
271+
class DogOwner(db.Document):
272+
dogs = db.ListField(db.ReferenceField(Dog))
273+
274+
DogOwnerForm = model_form(DogOwner)
275+
276+
dogs = [Dog(name="fido"), Dog(name="rex")]
277+
for dog in dogs:
278+
dog.save()
279+
280+
form = DogOwnerForm(dogs=None)
281+
self.assertTrue(form.validate())
282+
283+
self.assertEqual(wtforms.widgets.Select, type(form.dogs.widget))
284+
self.assertEqual(True, form.dogs.widget.multiple)
285+
286+
# Validate if both dogs are selected
287+
choices = list(form.dogs)
288+
self.assertEqual(len(choices), 2)
289+
self.assertFalse(choices[0].checked)
290+
self.assertFalse(choices[1].checked)
291+
264292
def test_passwordfield(self):
265293
with self.app.test_request_context('/'):
266294
db = self.db

0 commit comments

Comments
 (0)