25 lines
778 B
Python
25 lines
778 B
Python
from flask_admin._compat import iteritems
|
|
from flask_admin.model.form import InlineBaseFormAdmin
|
|
|
|
|
|
class EmbeddedForm(InlineBaseFormAdmin):
|
|
def __init__(self, **kwargs):
|
|
super(EmbeddedForm, self).__init__(**kwargs)
|
|
|
|
self._form_subdocuments = convert_subdocuments(getattr(self, 'form_subdocuments', {}))
|
|
|
|
|
|
def convert_subdocuments(values):
|
|
result = {}
|
|
|
|
for name, p in iteritems(values):
|
|
if isinstance(p, dict):
|
|
result[name] = EmbeddedForm(**p)
|
|
elif isinstance(p, EmbeddedForm):
|
|
result[name] = p
|
|
else:
|
|
raise ValueError('Invalid subdocument type: expecting dict or '
|
|
'instance of flask_admin.contrib.mongoengine.EmbeddedForm, got %s' % type(p))
|
|
|
|
return result
|