From 8f168976d68282a6180d2af4e12c4f3b6dd09c85 Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Tue, 24 Jan 2012 10:00:39 +0000 Subject: [PATCH] Fixed #17580 -- Made sure datetime.date instances are correctly handled when being passed to a DateTimeField fields and the timezone support is enabled by making it aware using the default timezone. git-svn-id: http://code.djangoproject.com/svn/django/trunk@17392 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/fields/__init__.py | 6 +++++- tests/modeltests/timezones/tests.py | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 04b13aa5c8..70a7024c26 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -748,7 +748,11 @@ class DateTimeField(DateField): if isinstance(value, datetime.datetime): return value if isinstance(value, datetime.date): - return datetime.datetime(value.year, value.month, value.day) + value = datetime.datetime(value.year, value.month, value.day) + if settings.USE_TZ: + default_timezone = timezone.get_default_timezone() + value = timezone.make_aware(value, default_timezone) + return value value = smart_str(value) diff --git a/tests/modeltests/timezones/tests.py b/tests/modeltests/timezones/tests.py index b46aa0ed8c..41c0016240 100644 --- a/tests/modeltests/timezones/tests.py +++ b/tests/modeltests/timezones/tests.py @@ -261,6 +261,13 @@ class NewDatabaseTests(BaseDateTimeTests): # naive datetimes are interpreted in local time self.assertEqual(event.dt, dt.replace(tzinfo=EAT)) + @requires_tz_support + def test_datetime_from_date(self): + dt = datetime.date(2011, 9, 1) + Event.objects.create(dt=dt) + event = Event.objects.get() + self.assertEqual(event.dt, datetime.datetime(2011, 9, 1, tzinfo=EAT)) + @requires_tz_support @skipIf(sys.version_info < (2, 6), "this test requires Python >= 2.6") @skipUnlessDBFeature('supports_microsecond_precision')