diff --git a/AUTHORS b/AUTHORS index 18258953..0ed0e0b5 100644 --- a/AUTHORS +++ b/AUTHORS @@ -216,3 +216,4 @@ that much better: * Mikhail Moshnogorsky (https://github.com/mikhailmoshnogorsky) * Diego Berrocal (https://github.com/cestdiego) * Matthew Ellison (https://github.com/seglberg) + * Jimmy Shen (https://github.com/jimmyshen) diff --git a/docs/changelog.rst b/docs/changelog.rst index 1f6565dc..4e53234f 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,7 @@ Changelog Changes in 0.9.X - DEV ====================== +- ComplexDateTimeField should fall back to None when null=True #864 - Request Support for $min, $max Field update operators #863 - `BaseDict` does not follow `setdefault` #866 - Add support for $type operator # 766 @@ -76,7 +77,6 @@ Changes in 0.9.X - DEV - Make `in_bulk()` respect `no_dereference()` #775 - Handle None from model __str__; Fixes #753 #754 - Changes in 0.8.7 ================ - Calling reload on deleted / nonexistent documents raises DoesNotExist (#538) diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 7af64741..cfe66a48 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -510,7 +510,7 @@ class ComplexDateTimeField(StringField): def __get__(self, instance, owner): data = super(ComplexDateTimeField, self).__get__(instance, owner) if data is None: - return datetime.datetime.now() + return None if self.null else datetime.datetime.now() if isinstance(data, datetime.datetime): return data return self._convert_from_string(data) diff --git a/tests/document/instance.py b/tests/document/instance.py index 3c6a9940..eb887dce 100644 --- a/tests/document/instance.py +++ b/tests/document/instance.py @@ -2760,6 +2760,12 @@ class InstanceTest(unittest.TestCase): class User(Document): name = StringField() height = IntField(default=184, null=True) + str_fld = StringField(null=True) + int_fld = IntField(null=True) + flt_fld = FloatField(null=True) + dt_fld = DateTimeField(null=True) + cdt_fld = ComplexDateTimeField(null=True) + User.objects.delete() u = User(name='user') u.save() @@ -2767,6 +2773,12 @@ class InstanceTest(unittest.TestCase): u_from_db.height = None u_from_db.save() self.assertEquals(u_from_db.height, None) + # 864 + self.assertEqual(u_from_db.str_fld, None) + self.assertEqual(u_from_db.int_fld, None) + self.assertEqual(u_from_db.flt_fld, None) + self.assertEqual(u_from_db.dt_fld, None) + self.assertEqual(u_from_db.cdt_fld, None) # 735 User.objects.delete()