From 73549a904484c1f549a2079d7aa05f4d218de279 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wilson=20J=C3=BAnior?= Date: Thu, 17 Jul 2014 09:41:06 -0300 Subject: [PATCH] fixes for rebase branch --- mongoengine/base/document.py | 27 +++++++++++++-------------- mongoengine/fields.py | 3 ++- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/mongoengine/base/document.py b/mongoengine/base/document.py index 593c237d..7509fffe 100644 --- a/mongoengine/base/document.py +++ b/mongoengine/base/document.py @@ -268,7 +268,6 @@ class BaseDocument(object): data["_id"] = None data['_cls'] = self._class_name EmbeddedDocumentField = _import_class("EmbeddedDocumentField") - # only root fields ['test1.a', 'test2'] => ['test1', 'test2'] root_fields = set([f.split('.')[0] for f in fields]) @@ -283,22 +282,22 @@ class BaseDocument(object): field = self._dynamic_fields.get(field_name) if value is not None: - EmbeddedDocument = _import_class("EmbeddedDocument") - if isinstance(value, (EmbeddedDocument)) and \ - not use_db_field: - value = field.to_mongo(value, use_db_field) + + if isinstance(field, (EmbeddedDocumentField)): + if fields: + key = '%s.' % field_name + embedded_fields = [ + i.replace(key, '') for i in fields + if i.startswith(key)] + + else: + embedded_fields = [] + + value = field.to_mongo(value, use_db_field=use_db_field, + fields=embedded_fields) else: value = field.to_mongo(value) - if isinstance(field, EmbeddedDocumentField) and fields: - key = '%s.' % field_name - - value = field.to_mongo(value, fields=[ - i.replace(key, '') for i in fields if i.startswith(key)]) - - elif value is not None: - value = field.to_mongo(value) - # Handle self generating fields if value is None and field._auto_gen: value = field.generate() diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 22bb7423..58271435 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -570,7 +570,8 @@ class EmbeddedDocumentField(BaseField): def to_mongo(self, value, use_db_field=True, fields=[]): if not isinstance(value, self.document_type): return value - return self.document_type.to_mongo(value, use_db_field) + return self.document_type.to_mongo(value, use_db_field, + fields=fields) def validate(self, value, clean=True): """Make sure that the document instance is an instance of the