Fixed #21432 -- DateTimeQuery now copies tzinfo when cloning.

Thanks Enrique Martínez for the report and @bmispelon for the tests.
This commit is contained in:
Loic Bistuer 2013-11-14 16:32:55 +07:00 committed by Baptiste Mispelon
parent 3e845b79ce
commit 17ed99f3a3
2 changed files with 22 additions and 1 deletions

View File

@ -260,6 +260,11 @@ class DateTimeQuery(DateQuery):
compiler = 'SQLDateTimeCompiler' 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): def _check_field(self, field):
assert isinstance(field, DateTimeField), \ assert isinstance(field, DateTimeField), \
"%r isn't a DateTimeField." % field.name "%r isn't a DateTimeField." % field.name

View File

@ -1,8 +1,16 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime 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 from .models import Article, Comment, Category
@ -81,3 +89,11 @@ class DateTimesTests(TestCase):
], ],
lambda d: d, 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)