diff --git a/docs/changelog.rst b/docs/changelog.rst index a87d3438..977a568f 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,8 @@ Changelog Changes in dev ============== +- Fixed issue creating indexes with recursive embedded documents +- Fixed recursive lookup in _unique_with_indexes - Fixed passing ComplexField defaults to constructor for ReferenceFields - Fixed validation of DictField Int keys - Added optional cascade saving diff --git a/mongoengine/base.py b/mongoengine/base.py index b06cacb4..58fcbd6e 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -687,7 +687,7 @@ class TopLevelDocumentMetaclass(DocumentMetaclass): unique_indexes.append(index) # Grab any embedded document field unique indexes - if field.__class__.__name__ == "EmbeddedDocumentField": + if field.__class__.__name__ == "EmbeddedDocumentField" and field.document_type != new_class: field_namespace = "%s." % field_name unique_indexes += cls._unique_with_indexes(field.document_type, field_namespace) diff --git a/tests/document.py b/tests/document.py index 75a77023..a4dffe70 100644 --- a/tests/document.py +++ b/tests/document.py @@ -751,6 +751,17 @@ class DocumentTest(unittest.TestCase): post1.save() BlogPost.drop_collection() + def test_recursive_embedded_objects_dont_break_indexes(self): + + class RecursiveObject(EmbeddedDocument): + obj = EmbeddedDocumentField('self') + + class RecursiveDocument(Document): + recursive_obj = EmbeddedDocumentField(RecursiveObject) + + info = RecursiveDocument.objects._collection.index_information() + self.assertEqual(info.keys(), ['_id_', '_types_1']) + def test_geo_indexes_recursion(self): class User(Document):