Commit ef8e9e52 authored by Nathan Steyer's avatar Nathan Steyer

fix mongoengine model converter

parent 0c4d2c9f
...@@ -7,6 +7,7 @@ from flask_mongoengine.wtf import orm, fields as mongo_fields ...@@ -7,6 +7,7 @@ from flask_mongoengine.wtf import orm, fields as mongo_fields
from flask_admin import form from flask_admin import form
from flask_admin.model.form import FieldPlaceholder from flask_admin.model.form import FieldPlaceholder
from flask_admin.model.fields import InlineFieldList, AjaxSelectField, AjaxSelectMultipleField from flask_admin.model.fields import InlineFieldList, AjaxSelectField, AjaxSelectMultipleField
from flask_admin.form.validators import FieldListInputRequired
from flask_admin._compat import iteritems from flask_admin._compat import iteritems
from .fields import ModelFormField, MongoFileField, MongoImageField from .fields import ModelFormField, MongoFileField, MongoImageField
...@@ -74,7 +75,10 @@ class CustomModelConverter(orm.ModelConverter): ...@@ -74,7 +75,10 @@ class CustomModelConverter(orm.ModelConverter):
kwargs['validators'] = list(kwargs['validators']) kwargs['validators'] = list(kwargs['validators'])
if field.required: if field.required:
kwargs['validators'].append(validators.InputRequired()) if isinstance(field, ListField):
kwargs['validators'].append(FieldListInputRequired())
else:
kwargs['validators'].append(validators.InputRequired())
elif not isinstance(field, ListField): elif not isinstance(field, ListField):
kwargs['validators'].append(validators.Optional()) kwargs['validators'].append(validators.Optional())
......
from flask_admin.babel import gettext
from wtforms.validators import StopValidation
class FieldListInputRequired(object):
"""
Validates that at least one item was provided for a FieldList
"""
field_flags = ('required',)
def __call__(self, form, field):
if len(field.entries) == 0:
field.errors[:] = []
raise StopValidation(gettext('This field requires at least one item.'))
...@@ -45,13 +45,15 @@ def get_url(endpoint, **kwargs): ...@@ -45,13 +45,15 @@ def get_url(endpoint, **kwargs):
def is_required_form_field(field): def is_required_form_field(field):
""" """
Check if form field has `DataRequired` or `InputRequired` validators. Check if form field has `DataRequired`, `InputRequired`, or
`FieldListInputRequired` validators.
:param field: :param field:
WTForms field to check WTForms field to check
""" """
from flask_admin.form.validators import FieldListInputRequired
for validator in field.validators: for validator in field.validators:
if isinstance(validator, (DataRequired, InputRequired)): if isinstance(validator, (DataRequired, InputRequired, FieldListInputRequired)):
return True return True
return False return False
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment