Commit 723cdfad authored by Serge S. Koval's avatar Serge S. Koval

Support form_rules in MongoEngine embedded documents.

parent f7d78461
......@@ -7,7 +7,7 @@ from flask.ext.mongoengine.wtf import orm, fields as mongo_fields
from flask.ext.admin import form
from flask.ext.admin.model.form import FieldPlaceholder
from flask.ext.admin.model.fields import InlineFieldList, AjaxSelectField, AjaxSelectMultipleField
from flask.ext.admin.model.widgets import InlineFormWidget
from flask.ext.admin.model.widgets import InlineFormRuleWidget
from flask.ext.admin._compat import iteritems
from .fields import ModelFormField, MongoFileField, MongoImageField
......@@ -135,11 +135,11 @@ class CustomModelConverter(orm.ModelConverter):
# FormField does not support validators
kwargs['validators'] = []
if 'widget' not in kwargs:
kwargs['widget'] = InlineFormWidget()
view = self._get_subdocument_config(field.name)
if 'widget' not in kwargs:
kwargs['widget'] = InlineFormRuleWidget(view._form_rules)
form_class = view.get_form()
if form_class is None:
converter = self.clone_converter(view)
......
from flask.ext.admin._compat import iteritems
from flask.ext.admin.form import rules
from flask.ext.admin.model.form import InlineBaseFormAdmin
......@@ -8,6 +9,13 @@ class EmbeddedForm(InlineBaseFormAdmin):
self._form_subdocuments = convert_subdocuments(getattr(self, 'form_subdocuments', {}))
form_rules = getattr(self, 'form_rules', None)
if form_rules:
self._form_rules = rules.RuleSet(self, form_rules)
else:
self._form_rules = None
def convert_subdocuments(values):
result = {}
......
......@@ -239,7 +239,7 @@ class Field(Macro):
field = getattr(form, self.field_name, None)
if not field:
raise ValueError('Form %s does not have field %s' % (form, form_opts, self.field_name))
raise ValueError('Form %s does not have field %s' % (form, self.field_name))
opts = {}
......
......@@ -16,9 +16,20 @@ class InlineFormWidget(RenderTemplateWidget):
super(InlineFormWidget, self).__init__('admin/model/inline_form.html')
def __call__(self, field, **kwargs):
kwargs.setdefault('form_rules', None)
return super(InlineFormWidget, self).__call__(field, **kwargs)
class InlineFormRuleWidget(InlineFormWidget):
def __init__(self, rule_set):
super(InlineFormRuleWidget, self).__init__()
self.rule_set = rule_set
def __call__(self, field, **kwargs):
kwargs['form_rules'] = self.rule_set
return super(InlineFormRuleWidget, self).__call__(field, **kwargs)
class AjaxSelect2Widget(object):
def __init__(self, multiple=False):
self.multiple = multiple
......
{% import 'admin/lib.html' as lib with context %}
<div class="fa-inline-field">
{{ lib.render_form_fields(field) }}
{{ lib.render_form_fields(field.form, form_rules=form_rules) }}
</div>
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