Skip to content

Commit f48b126

Browse files
authored
Merge pull request pallets-eco#1825 from nathan-steyer/fix-mongoengine-model-converter
Fix bug in mongoengine model converter
2 parents 0c4d2c9 + ef8e9e5 commit f48b126

File tree

3 files changed

+25
-3
lines changed

3 files changed

+25
-3
lines changed

flask_admin/contrib/mongoengine/form.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from flask_admin import form
88
from flask_admin.model.form import FieldPlaceholder
99
from flask_admin.model.fields import InlineFieldList, AjaxSelectField, AjaxSelectMultipleField
10+
from flask_admin.form.validators import FieldListInputRequired
1011
from flask_admin._compat import iteritems
1112

1213
from .fields import ModelFormField, MongoFileField, MongoImageField
@@ -74,7 +75,10 @@ def convert(self, model, field, field_args):
7475
kwargs['validators'] = list(kwargs['validators'])
7576

7677
if field.required:
77-
kwargs['validators'].append(validators.InputRequired())
78+
if isinstance(field, ListField):
79+
kwargs['validators'].append(FieldListInputRequired())
80+
else:
81+
kwargs['validators'].append(validators.InputRequired())
7882
elif not isinstance(field, ListField):
7983
kwargs['validators'].append(validators.Optional())
8084

flask_admin/form/validators.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from flask_admin.babel import gettext
2+
3+
from wtforms.validators import StopValidation
4+
5+
6+
class FieldListInputRequired(object):
7+
"""
8+
Validates that at least one item was provided for a FieldList
9+
"""
10+
11+
field_flags = ('required',)
12+
13+
def __call__(self, form, field):
14+
if len(field.entries) == 0:
15+
field.errors[:] = []
16+
raise StopValidation(gettext('This field requires at least one item.'))

flask_admin/helpers.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,15 @@ def get_url(http://github.com/endpoint,%20**kwargs):
4545

4646
def is_required_form_field(field):
4747
"""
48-
Check if form field has `DataRequired` or `InputRequired` validators.
48+
Check if form field has `DataRequired`, `InputRequired`, or
49+
`FieldListInputRequired` validators.
4950
5051
:param field:
5152
WTForms field to check
5253
"""
54+
from flask_admin.form.validators import FieldListInputRequired
5355
for validator in field.validators:
54-
if isinstance(validator, (DataRequired, InputRequired)):
56+
if isinstance(validator, (DataRequired, InputRequired, FieldListInputRequired)):
5557
return True
5658
return False
5759

0 commit comments

Comments
 (0)