Circular references with EmbeddedDocumentField fix

Fixes #345
This commit is contained in:
Ross Lawley 2011-11-28 08:23:28 -08:00
parent 700e2cd93d
commit c775c0a80c
3 changed files with 14 additions and 1 deletions

View File

@ -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

View File

@ -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)

View File

@ -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):