From 576db9ca88bef73aedb107ce7edf2e502acaf7f5 Mon Sep 17 00:00:00 2001 From: Ross Lawley Date: Tue, 14 Jun 2011 15:09:03 +0100 Subject: [PATCH] Fixes DateTimeField handling of date objects. Fixes #191 --- mongoengine/fields.py | 10 +++++++--- tests/fields.py | 12 ++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/mongoengine/fields.py b/mongoengine/fields.py index eeb4c2c0..ca18255c 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -232,12 +232,16 @@ class DateTimeField(BaseField): """A datetime field. Note: Microseconds are rounded to the nearest millisecond. - Pre UTC microsecond support is effecively broken see - `tests.field.test_datetime` for more information. + Pre UTC microsecond support is effecively broken. + Use :class:`~mongoengine.fields.ComplexDateTimeField` if you + need accurate microsecond support. """ def validate(self, value): - assert isinstance(value, datetime.datetime) + assert isinstance(value, (datetime.datetime, datetime.date)) + + def to_mongo(self, value): + return self.prepare_query_value(None, value) def prepare_query_value(self, op, value): if value is None: diff --git a/tests/fields.py b/tests/fields.py index 79cd519c..773ba93c 100644 --- a/tests/fields.py +++ b/tests/fields.py @@ -182,6 +182,9 @@ class FieldTest(unittest.TestCase): log.time = datetime.datetime.now() log.validate() + log.time = datetime.date.today() + log.validate() + log.time = -1 self.assertRaises(ValidationError, log.validate) log.time = '1pm' @@ -199,6 +202,15 @@ class FieldTest(unittest.TestCase): LogEntry.drop_collection() + # Test can save dates + log = LogEntry() + log.date = datetime.date.today() + log.save() + log.reload() + self.assertEquals(log.date.date(), datetime.date.today()) + + LogEntry.drop_collection() + # Post UTC - microseconds are rounded (down) nearest millisecond and dropped d1 = datetime.datetime(1970, 01, 01, 00, 00, 01, 999) d2 = datetime.datetime(1970, 01, 01, 00, 00, 01)