Open
Description
Some embedded document structures trip up delta tracking and cause saves to fail. For example, take the following script:
import mongoengine
class EmbeddedDoc(mongoengine.EmbeddedDocument):
content = mongoengine.StringField()
docs = mongoengine.ListField(mongoengine.EmbeddedDocumentField('EmbeddedDoc'))
class Doc(mongoengine.Document):
docs = mongoengine.ListField(mongoengine.EmbeddedDocumentField(EmbeddedDoc))
mongoengine.connect('test')
Doc.objects.delete()
d = Doc()
d.docs = [EmbeddedDoc(content='1', docs=[])]
d.save()
d = Doc.objects[0]
e = EmbeddedDoc()
e.content = '2'
d.docs[0].docs.insert(0, e)
d.save()
The final call to save()
fails with an error:
Traceback (most recent call last):
File "break-mongoengine.py", line 24, in <module>
d.save()
File "/home/sm/Code/ma/venv/src/mongoengine/mongoengine/document.py", line 372, in save
raise OperationError(message % six.text_type(err))
mongoengine.errors.OperationError: Could not save document (Cannot update 'docs.0.docs.0.content' and 'docs.0.docs' at the same time)