Commit ad5bc907 authored by Serge S. Koval's avatar Serge S. Koval

Inline forms cleanup

parent 43384276
from mongoengine import ReferenceField, EmbeddedDocumentField
from mongoengine import ReferenceField
from wtforms import fields as f
from flask.ext.mongoengine.wtf import orm, fields
from flask.ext.admin import form
from flask.ext.admin.model.fields import InlineFieldList
from flask.ext.admin.model.fields import InlineFieldList, InlineModelFormField
class CustomModelConverter(orm.ModelConverter):
......@@ -30,6 +32,18 @@ class CustomModelConverter(orm.ModelConverter):
}
return InlineFieldList(unbound_field, min_entries=0, **kwargs)
@orm.converts('EmbeddedDocumentField')
def conv_EmbeddedDocument(self, model, field, kwargs):
# TODO: Fix me
kwargs = {
'validators': [],
'filters': [],
'widget': InlineModelFormField()
}
form_class = model_form(field.document_type_obj, field_args={})
return f.FormField(form_class, **kwargs)
@orm.converts('ReferenceField')
def conv_Reference(self, model, field, kwargs):
kwargs['widget'] = form.Select2Widget()
......
......@@ -4,12 +4,11 @@
import operator
from wtforms import widgets
from wtforms.fields import SelectFieldBase, FieldList
from wtforms.fields import SelectFieldBase
from wtforms.validators import ValidationError
from .tools import get_primary_key
from flask.ext.admin.model.fields import InlineFieldList, InlineModelFormField
from flask.ext.admin.model.widgets import InlineFormListWidget
try:
......@@ -183,11 +182,8 @@ class QuerySelectMultipleField(QuerySelectField):
class InlineModelFormList(InlineFieldList):
"""
Customised ``wtforms.fields.FieldList`` class which will work with SQLAlchemy
model instances.
TODO: Documentation
"""
widget = InlineFormListWidget()
def __init__(self, form, session, model, prop, **kwargs):
"""
Default constructor.
......
from wtforms.fields import FieldList, FormField
from .widgets import InlineFieldListWidget
from .widgets import InlineFieldListWidget, InlineFormWidget
class InlineFieldList(FieldList):
......@@ -55,6 +55,8 @@ class InlineModelFormField(FormField):
Excludes model primary key from the `populate_obj` and
handles `should_delete` flag.
"""
widget = InlineFormWidget()
def __init__(self, form, pk, **kwargs):
super(InlineModelFormField, self).__init__(form, **kwargs)
......
......@@ -6,6 +6,6 @@ class InlineFieldListWidget(RenderTemplateWidget):
super(InlineFieldListWidget, self).__init__('admin/model/inline_field_list.html')
class InlineFormListWidget(RenderTemplateWidget):
class InlineFormWidget(RenderTemplateWidget):
def __init__(self):
super(InlineFormListWidget, self).__init__('admin/model/inline_form_list.html')
super(InlineFormWidget, self).__init__('admin/model/inline_form.html')
{% import 'admin/lib.html' as lib with context %}
{{ lib.render_form_fields(field, True) }}
{% import 'admin/model/inline_list_base.html' as base with context %}
{% import 'admin/lib.html' as lib with context %}
{% macro render_field(field) %}
{{ lib.render_form_fields(field, True) }}
{% endmacro %}
{{ base.render_inline_fields(field, template, render_field, check) }}
......@@ -25,7 +25,6 @@
</div>
{% endfor %}
</div>
{{ field.id }}
<a href="#" class="btn" onclick="faForm.addInlineField('{{ field.id }}', '#{{ field.id }}-fields', {{ render_template(template, render)|tojson }});">{{ _gettext('Add') }} {{ field.label.text }}</a>
</div>
{% endmacro %}
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