Bläddra i källkod

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

Thanks Enrique Martínez for the report and @bmispelon for the tests.
Loic Bistuer 11 år sedan
förälder
incheckning
17ed99f3a3
2 ändrade filer med 22 tillägg och 1 borttagningar
  1. 5 0
      django/db/models/sql/subqueries.py
  2. 17 1
      tests/datetimes/tests.py

+ 5 - 0
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

+ 17 - 1
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)