From 17ed99f3a3eea4bd27fa34be59c3582616ed8079 Mon Sep 17 00:00:00 2001 From: Loic Bistuer Date: Thu, 14 Nov 2013 16:32:55 +0700 Subject: [PATCH] Fixed #21432 -- DateTimeQuery now copies tzinfo when cloning. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thanks Enrique Martínez for the report and @bmispelon for the tests. --- django/db/models/sql/subqueries.py | 5 +++++ tests/datetimes/tests.py | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/django/db/models/sql/subqueries.py b/django/db/models/sql/subqueries.py index 17438bc359..79db1ad99a 100644 --- a/django/db/models/sql/subqueries.py +++ b/django/db/models/sql/subqueries.py @@ -260,6 +260,11 @@ class DateTimeQuery(DateQuery): compiler = 'SQLDateTimeCompiler' + def clone(self, klass=None, memo=None, **kwargs): + if 'tzinfo' not in kwargs and hasattr(self, 'tzinfo'): + kwargs['tzinfo'] = self.tzinfo + return super(DateTimeQuery, self).clone(klass, memo, **kwargs) + def _check_field(self, field): assert isinstance(field, DateTimeField), \ "%r isn't a DateTimeField." % field.name diff --git a/tests/datetimes/tests.py b/tests/datetimes/tests.py index f54b30d967..ee0b676664 100644 --- a/tests/datetimes/tests.py +++ b/tests/datetimes/tests.py @@ -1,8 +1,16 @@ from __future__ import unicode_literals import datetime +from unittest import skipIf + +try: + import pytz +except ImportError: + pytz = None + +from django.test import TestCase, override_settings +from django.utils import timezone -from django.test import TestCase from .models import Article, Comment, Category @@ -81,3 +89,11 @@ class DateTimesTests(TestCase): ], lambda d: d, ) + + @skipIf(pytz is None, "this test requires pytz") + @override_settings(USE_TZ=True) + def test_21432(self): + now = timezone.localtime(timezone.now().replace(microsecond=0)) + Article.objects.create(title="First one", pub_date=now) + qs = Article.objects.datetimes('pub_date', 'second') + self.assertEqual(qs[0], now)