subdoc.py 802 B

123456789101112131415161718192021222324
  1. from flask_admin._compat import iteritems
  2. from flask_admin.model.form import InlineBaseFormAdmin
  3. class EmbeddedForm(InlineBaseFormAdmin):
  4. def __init__(self, **kwargs):
  5. super(EmbeddedForm, self).__init__(**kwargs)
  6. self._form_subdocuments = convert_subdocuments(getattr(self, 'form_subdocuments', {}))
  7. def convert_subdocuments(values):
  8. result = {}
  9. for name, p in iteritems(values):
  10. if isinstance(p, dict):
  11. result[name] = EmbeddedForm(**p)
  12. elif isinstance(p, EmbeddedForm):
  13. result[name] = p
  14. else:
  15. raise ValueError('Invalid subdocument type: expecting dict or '
  16. 'instance of flask_admin.contrib.mongoengine.EmbeddedForm, got %s' % type(p))
  17. return result