diff --git a/docs/guide/defining-documents.rst b/docs/guide/defining-documents.rst index 00a7d090..fd005e40 100644 --- a/docs/guide/defining-documents.rst +++ b/docs/guide/defining-documents.rst @@ -50,6 +50,7 @@ are as follows: * :class:`~mongoengine.ReferenceField` * :class:`~mongoengine.GenericReferenceField` * :class:`~mongoengine.EmbeddedDocumentField` +* :class:`~mongoengine.GenericEmbeddedDocumentField` * :class:`~mongoengine.BooleanField` * :class:`~mongoengine.FileField` * :class:`~mongoengine.BinaryField` diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 9bb414bd..c5734430 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -374,8 +374,8 @@ class ComplexDateTimeField(StringField): class EmbeddedDocumentField(BaseField): - """An embedded document field. Only valid values are subclasses of - :class:`~mongoengine.EmbeddedDocument`. + """An embedded document field - with a declared document_type. + Only valid values are subclasses of :class:`~mongoengine.EmbeddedDocument`. """ def __init__(self, document_type, **kwargs): @@ -421,7 +421,14 @@ class EmbeddedDocumentField(BaseField): def prepare_query_value(self, op, value): return self.to_mongo(value) + class GenericEmbeddedDocumentField(BaseField): + """A generic embedded document field - allows any + :class:`~mongoengine.EmbeddedDocument` to be stored. + + Only valid values are subclasses of :class:`~mongoengine.EmbeddedDocument`. + """ + def prepare_query_value(self, op, value): return self.to_mongo(value) @@ -448,6 +455,7 @@ class GenericEmbeddedDocumentField(BaseField): data['_cls'] = document._class_name return data + class ListField(ComplexBaseField): """A list field that wraps a standard field, allowing multiple instances of the field to be used as a list in the database.