Commit 510d2dfb authored by Serge S. Koval's avatar Serge S. Koval

Added support for MongoEngine ListField(ReferenceField) AJAX-based multi-select

parent a797f934
......@@ -76,13 +76,19 @@ class UserView(ModelView):
column_searchable_list = ('name', 'password')
form_ajax_refs = {
'tags': {
'fields': ('name',)
}
}
class TodoView(ModelView):
column_filters = ['done']
form_ajax_refs = {
'user': {
'fields': ('name',)
'fields': ['name']
}
}
......
......@@ -74,7 +74,14 @@ def create_ajax_loader(model, name, field_name, opts):
if prop is None:
raise ValueError('Model %s does not have field %s.' % (model, field_name))
# TODO: Check for field
ftype = type(prop).__name__
if ftype == 'ListField':
prop = prop.field
ftype = type(prop).__name__
if ftype != 'ReferenceField':
raise ValueError('Dont know how to convert %s type for AJAX loader' % ftype)
remote_model = prop.document_type
return QueryAjaxModelLoader(name, remote_model, **opts)
......
......@@ -6,7 +6,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
from flask.ext.admin.model.fields import InlineFieldList, AjaxSelectField, AjaxSelectMultipleField
from flask.ext.admin.model.widgets import InlineFormWidget
from flask.ext.admin._compat import iteritems
......@@ -102,6 +102,10 @@ class CustomModelConverter(orm.ModelConverter):
raise ValueError('ListField "%s" must have field specified for model %s' % (field.name, model))
if isinstance(field.field, ReferenceField):
loader = getattr(self.view, '_form_ajax_refs', {}).get(field.name)
if loader:
return AjaxSelectMultipleField(loader, **kwargs)
kwargs['widget'] = form.Select2Widget(multiple=True)
# TODO: Support AJAX multi-select
......
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