diff --git a/mongoengine/base.py b/mongoengine/base.py index 086c7874..9f54cd76 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -410,11 +410,18 @@ class BaseDocument(object): value = getattr(self, field_name, None) if value is not None: data[field.db_field] = field.to_mongo(value) + else: + data[field.db_field] = None # Only add _cls and _types if allow_inheritance is not False if not (hasattr(self, '_meta') and self._meta.get('allow_inheritance', True) == False): data['_cls'] = self._class_name data['_types'] = self._superclasses.keys() + [self._class_name] + try: + if not data['_id']: + del data['_id'] + except KeyError: + pass return data @classmethod @@ -446,7 +453,8 @@ class BaseDocument(object): for field_name, field in cls._fields.items(): if field.db_field in data: - data[field_name] = field.to_python(data[field.db_field]) + value = data[field.db_field] + data[field_name] = value if value is None else field.to_python(value) obj = cls(**data) obj._present_fields = present_fields