From 22e75c1691e67a487d90166c37f3cf08531226ac Mon Sep 17 00:00:00 2001 From: Ivan Pogrebkov Date: Fri, 26 Jan 2018 10:55:44 +0300 Subject: [PATCH 1/8] Insert null values fix https://stackoverflow.com/questions/42601950/how-to-store-a-null-value-in-mongodb-via-mongoengine --- mongoengine/base/document.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/mongoengine/base/document.py b/mongoengine/base/document.py index 658d0c79..956e9b0e 100644 --- a/mongoengine/base/document.py +++ b/mongoengine/base/document.py @@ -337,11 +337,10 @@ class BaseDocument(object): value = field.generate() self._data[field_name] = value - if value is not None: - if use_db_field: - data[field.db_field] = value - else: - data[field.name] = value + if use_db_field: + data[field.db_field] = value + else: + data[field.name] = value # Only add _cls if allow_inheritance is True if not self._meta.get('allow_inheritance'): From fb213f6e7432e2b9aca4eb4ce619a9db0c521f28 Mon Sep 17 00:00:00 2001 From: Ivan Pogrebkov Date: Fri, 26 Jan 2018 11:12:02 +0300 Subject: [PATCH 2/8] Update document.py --- mongoengine/base/document.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mongoengine/base/document.py b/mongoengine/base/document.py index 956e9b0e..2115a252 100644 --- a/mongoengine/base/document.py +++ b/mongoengine/base/document.py @@ -147,6 +147,7 @@ class BaseDocument(object): if not hasattr(self, name) and not name.startswith('_'): DynamicField = _import_class('DynamicField') + field = DynamicField(db_field=name,null=True) field = DynamicField(db_field=name) field.name = name self._dynamic_fields[name] = field @@ -337,10 +338,11 @@ class BaseDocument(object): value = field.generate() self._data[field_name] = value - if use_db_field: - data[field.db_field] = value - else: - data[field.name] = value + if (value is not None) or (field.null): + if use_db_field: + data[field.db_field] = value + else: + data[field.name] = value # Only add _cls if allow_inheritance is True if not self._meta.get('allow_inheritance'): From 7e8c62104a31bc7168d24e6030437338664340cd Mon Sep 17 00:00:00 2001 From: Ivan Pogrebkov Date: Fri, 26 Jan 2018 11:15:12 +0300 Subject: [PATCH 3/8] null=True now usefull --- mongoengine/document.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mongoengine/document.py b/mongoengine/document.py index f1622934..d635d62e 100644 --- a/mongoengine/document.py +++ b/mongoengine/document.py @@ -1010,6 +1010,7 @@ class DynamicDocument(Document): field_name = args[0] if field_name in self._dynamic_fields: setattr(self, field_name, None) + self._dynamic_fields[field_name].null = False else: super(DynamicDocument, self).__delattr__(*args, **kwargs) From 0d854ce906abf87d99ec0a102540570cf800237a Mon Sep 17 00:00:00 2001 From: Ivan Pogrebkov Date: Mon, 5 Feb 2018 03:24:53 +0300 Subject: [PATCH 4/8] style fix --- mongoengine/base/document.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mongoengine/base/document.py b/mongoengine/base/document.py index 2115a252..172e052f 100644 --- a/mongoengine/base/document.py +++ b/mongoengine/base/document.py @@ -147,7 +147,7 @@ class BaseDocument(object): if not hasattr(self, name) and not name.startswith('_'): DynamicField = _import_class('DynamicField') - field = DynamicField(db_field=name,null=True) + field = DynamicField(db_field=name, null=True) field = DynamicField(db_field=name) field.name = name self._dynamic_fields[name] = field From 6b04ddfad1b2b6574c03ed842e8020feb361d9ce Mon Sep 17 00:00:00 2001 From: Ivan Pogrebkov Date: Mon, 5 Feb 2018 04:24:03 +0300 Subject: [PATCH 5/8] >< --- mongoengine/base/document.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mongoengine/base/document.py b/mongoengine/base/document.py index 172e052f..f31c22ce 100644 --- a/mongoengine/base/document.py +++ b/mongoengine/base/document.py @@ -147,7 +147,6 @@ class BaseDocument(object): if not hasattr(self, name) and not name.startswith('_'): DynamicField = _import_class('DynamicField') - field = DynamicField(db_field=name, null=True) field = DynamicField(db_field=name) field.name = name self._dynamic_fields[name] = field From de360c61dd239ef44e2d2abd9c4ce835f1144cf8 Mon Sep 17 00:00:00 2001 From: Ivan Pogrebkov Date: Mon, 5 Feb 2018 04:26:25 +0300 Subject: [PATCH 6/8] removed useless lines --- mongoengine/document.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mongoengine/document.py b/mongoengine/document.py index d635d62e..f1622934 100644 --- a/mongoengine/document.py +++ b/mongoengine/document.py @@ -1010,7 +1010,6 @@ class DynamicDocument(Document): field_name = args[0] if field_name in self._dynamic_fields: setattr(self, field_name, None) - self._dynamic_fields[field_name].null = False else: super(DynamicDocument, self).__delattr__(*args, **kwargs) From d69808c20414d316fcc6f5a1a6e0d8f751b04a9b Mon Sep 17 00:00:00 2001 From: Ivan Pogrebkov Date: Mon, 5 Feb 2018 12:33:58 +0300 Subject: [PATCH 7/8] oh, ok... --- mongoengine/base/document.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mongoengine/base/document.py b/mongoengine/base/document.py index f31c22ce..348ee977 100644 --- a/mongoengine/base/document.py +++ b/mongoengine/base/document.py @@ -147,7 +147,7 @@ class BaseDocument(object): if not hasattr(self, name) and not name.startswith('_'): DynamicField = _import_class('DynamicField') - field = DynamicField(db_field=name) + field = DynamicField(db_field=name, null=True) field.name = name self._dynamic_fields[name] = field self._fields_ordered += (name,) From 7efa67e7e6a6bf32d208c6628b3b43a4c0d89bab Mon Sep 17 00:00:00 2001 From: Ivan Pogrebkov Date: Mon, 5 Feb 2018 12:35:06 +0300 Subject: [PATCH 8/8] reverse to 'style fix' --- mongoengine/document.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mongoengine/document.py b/mongoengine/document.py index f1622934..d635d62e 100644 --- a/mongoengine/document.py +++ b/mongoengine/document.py @@ -1010,6 +1010,7 @@ class DynamicDocument(Document): field_name = args[0] if field_name in self._dynamic_fields: setattr(self, field_name, None) + self._dynamic_fields[field_name].null = False else: super(DynamicDocument, self).__delattr__(*args, **kwargs)