diff --git a/mongoengine/fields.py b/mongoengine/fields.py index c34fe1b1..0d402712 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -483,6 +483,10 @@ class DateTimeField(BaseField): if not isinstance(value, six.string_types): return None + value = value.strip() + if not value: + return None + # Attempt to parse a datetime: if dateutil: try: diff --git a/tests/fields/fields.py b/tests/fields/fields.py index 60c8370a..7a0ccc25 100644 --- a/tests/fields/fields.py +++ b/tests/fields/fields.py @@ -35,6 +35,28 @@ __all__ = ("FieldTest", "EmbeddedDocumentListFieldTestCase") class FieldTest(MongoDBTestCase): + def test_datetime_from_empty_string(self): + """ + Ensure an exception is raised when trying to + cast an empty string to datetime. + """ + class MyDoc(Document): + dt = DateTimeField() + + md = MyDoc(dt='') + self.assertRaises(ValidationError, md.save) + + def test_datetime_from_whitespace_string(self): + """ + Ensure an exception is raised when trying to + cast a whitespace-only string to datetime. + """ + class MyDoc(Document): + dt = DateTimeField() + + md = MyDoc(dt=' ') + self.assertRaises(ValidationError, md.save) + def test_default_values_nothing_set(self): """Ensure that default field values are used when creating a document.