summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkjpc-tech <kyle@kjpc.tech>2020-05-14 16:56:21 -0600
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-05-15 07:07:49 +0200
commitef19aec2caab1ad246fd48ba1cf7c02e05706a5d (patch)
tree9790ef644017e5b4aae7a0d4bc36f694b18e269e
parentb46b0f80e81bbf8fcf7e8c20c249c8041db5e227 (diff)
[3.1.x] Fixed #31590 -- Fixed ModelAdmin.date_hierarchy crash with an empty QuerySet.
Regression in 55cdf6c52db07f29128741b8734a523ed042e465. Backport of 099bce1bf0b9802b7159beb9260b9b9e344bf497 from master
-rw-r--r--django/contrib/admin/templatetags/admin_list.py10
-rw-r--r--tests/admin_views/tests.py5
2 files changed, 10 insertions, 5 deletions
diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py
index 2b48f09f21..55565579ae 100644
--- a/django/contrib/admin/templatetags/admin_list.py
+++ b/django/contrib/admin/templatetags/admin_list.py
@@ -380,12 +380,12 @@ def date_hierarchy(cl):
# select appropriate start level
date_range = cl.queryset.aggregate(first=models.Min(field_name),
last=models.Max(field_name))
- if dates_or_datetimes == 'datetimes':
- date_range = {
- k: timezone.localtime(v) if timezone.is_aware(v) else v
- for k, v in date_range.items()
- }
if date_range['first'] and date_range['last']:
+ if dates_or_datetimes == 'datetimes':
+ date_range = {
+ k: timezone.localtime(v) if timezone.is_aware(v) else v
+ for k, v in date_range.items()
+ }
if date_range['first'].year == date_range['last'].year:
year_lookup = date_range['first'].year
if date_range['first'].month == date_range['last'].month:
diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py
index eb6f009f03..4d307486f1 100644
--- a/tests/admin_views/tests.py
+++ b/tests/admin_views/tests.py
@@ -969,6 +969,11 @@ class AdminViewBasicTest(AdminViewBasicTestCase):
self.assertEqual(response.context['site_url'], '/my-site-url/')
self.assertContains(response, '<a href="/my-site-url/">View site</a>')
+ def test_date_hierarchy_empty_queryset(self):
+ self.assertIs(Question.objects.exists(), False)
+ response = self.client.get(reverse('admin:admin_views_answer2_changelist'))
+ self.assertEqual(response.status_code, 200)
+
@override_settings(TIME_ZONE='America/Sao_Paulo', USE_TZ=True)
def test_date_hierarchy_timezone_dst(self):
# This datetime doesn't exist in this timezone due to DST.