Skip to content

Commit 7b06b40

Browse files
committed
Merge pull request #188 from pawl/fix_duplicate_validators
prevent duplicate validators when model_fields share field_args
2 parents dfc7a77 + 45468e6 commit 7b06b40

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

flask_mongoengine/wtf/orm.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ def convert(self, model, field, field_args):
5454
if field_args:
5555
kwargs.update(field_args)
5656

57+
if kwargs['validators']:
58+
# Create a copy of the list since we will be modifying it.
59+
kwargs['validators'] = list(kwargs['validators'])
60+
5761
if field.required:
5862
kwargs['validators'].append(validators.Required())
5963
else:

tests/test_forms.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,29 @@ class BlogPost(db.Document):
381381

382382
self.assertEqual(form.title.description, "Some imaginative title to set the world on fire")
383383

384+
def test_shared_field_args(self):
385+
with self.app.test_request_context('/'):
386+
db = self.db
387+
388+
class BlogPost(db.Document):
389+
title = db.StringField(required=True)
390+
content = db.StringField(required=False)
391+
392+
shared_field_args = {'title': {'validators': [
393+
wtforms.validators.Regexp('test')
394+
]}}
395+
396+
TitleOnlyForm = model_form(BlogPost, field_args=shared_field_args,
397+
exclude=['content'])
398+
BlogPostForm = model_form(BlogPost, field_args=shared_field_args)
399+
400+
# ensure shared field_args don't create duplicate validators
401+
title_only_form = TitleOnlyForm()
402+
self.assertEqual(len(title_only_form.title.validators), 2)
403+
404+
blog_post_form = BlogPostForm()
405+
self.assertEqual(len(blog_post_form.title.validators), 2)
406+
384407
def test_embedded_model_form(self):
385408
with self.app.test_request_context('/'):
386409
db = self.db

0 commit comments

Comments
 (0)