From f5e39c0064e52c03194e09a72c204c409a9ab5b2 Mon Sep 17 00:00:00 2001 From: Daniel Hasselrot Date: Tue, 6 Jul 2010 10:25:31 +0200 Subject: [PATCH 1/4] Allowed _id to be missing when converting to mongo --- mongoengine/base.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mongoengine/base.py b/mongoengine/base.py index c8c162b4..fe942b10 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -407,11 +407,15 @@ 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] + if hasattr(self, '_id') and not data['_id']: + del data['_id'] return data @classmethod From 3179c4e4aca20cdaa3daafb7cbc1204d847e2e2f Mon Sep 17 00:00:00 2001 From: Daniel Hasselrot Date: Tue, 6 Jul 2010 11:25:49 +0200 Subject: [PATCH 2/4] Now only removes _id if none, for real --- mongoengine/base.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mongoengine/base.py b/mongoengine/base.py index fe942b10..253c758a 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -414,8 +414,11 @@ class BaseDocument(object): self._meta.get('allow_inheritance', True) == False): data['_cls'] = self._class_name data['_types'] = self._superclasses.keys() + [self._class_name] - if hasattr(self, '_id') and not data['_id']: - del data['_id'] + try: + if not data['_id']: + del data['_id'] + except KeyError: + pass return data @classmethod From b89d71bfa5ffea3d3aff6c23ab0be4bcfefc930e Mon Sep 17 00:00:00 2001 From: Daniel Hasselrot Date: Tue, 6 Jul 2010 14:17:30 +0200 Subject: [PATCH 3/4] Do not convert None objects --- mongoengine/base.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mongoengine/base.py b/mongoengine/base.py index 253c758a..8137eddf 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -450,7 +450,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 From acbc741037c00736ce1dbdcd39bd77ddf6f663b3 Mon Sep 17 00:00:00 2001 From: Daniel Hasselrot Date: Thu, 15 Jul 2010 18:20:29 +0200 Subject: [PATCH 4/4] Made list store empty list by default --- mongoengine/fields.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 127f029f..6bfcff9f 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -261,6 +261,7 @@ class ListField(BaseField): raise ValidationError('Argument to ListField constructor must be ' 'a valid field') self.field = field + kwargs.setdefault("default", []) super(ListField, self).__init__(**kwargs) def __get__(self, instance, owner):