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