summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChaitanya <bkc14042005@gmail.com>2025-07-31 10:37:40 +0530
committerJacob Walls <jacobtylerwalls@gmail.com>2025-12-05 09:33:42 -0500
commit16252e690720edace3e0e220b99d9141fe091fb4 (patch)
tree74c66757268b205bf425f638acf6731365bc89bc
parent17d644c8e257c2ea5cc738fb7a9c47989e29bf09 (diff)
Fixed #36367 -- Added a label to the date_hierarchy in admin changelist.
Thanks Sarah Boyce for the implementation idea.
-rw-r--r--django/contrib/admin/static/admin/css/changelists.css3
-rw-r--r--django/contrib/admin/templates/admin/date_hierarchy.html4
-rw-r--r--django/contrib/admin/templatetags/admin_list.py5
-rw-r--r--tests/admin_changelist/test_date_hierarchy.py10
4 files changed, 19 insertions, 3 deletions
diff --git a/django/contrib/admin/static/admin/css/changelists.css b/django/contrib/admin/static/admin/css/changelists.css
index 60cbaf21eb..3557097292 100644
--- a/django/contrib/admin/static/admin/css/changelists.css
+++ b/django/contrib/admin/static/admin/css/changelists.css
@@ -265,7 +265,8 @@
font-weight: bold;
}
-.change-list .toplinks a {
+.change-list .toplinks a,
+.change-list .toplinks span {
font-size: 0.8125rem;
}
diff --git a/django/contrib/admin/templates/admin/date_hierarchy.html b/django/contrib/admin/templates/admin/date_hierarchy.html
index c508856428..2480ce7c31 100644
--- a/django/contrib/admin/templates/admin/date_hierarchy.html
+++ b/django/contrib/admin/templates/admin/date_hierarchy.html
@@ -1,5 +1,7 @@
+{% load i18n %}
{% if show %}
-<nav class="toplinks">
+<nav class="toplinks" aria-labelledby="date-hierarchy-label">
+<span id="date-hierarchy-label">{% blocktranslate %}Filter by {{ field_name }}{% endblocktranslate %}</span>
{% block date-hierarchy-toplinks %}
{% block date-hierarchy-back %}
{% if back %}<a href="{{ back.link }}" class="date-back">&lsaquo; {{ back.title }}</a>{% endif %}
diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py
index 43d87c0024..2100f93566 100644
--- a/django/contrib/admin/templatetags/admin_list.py
+++ b/django/contrib/admin/templatetags/admin_list.py
@@ -376,6 +376,7 @@ def date_hierarchy(cl):
if cl.date_hierarchy:
field_name = cl.date_hierarchy
field = get_fields_from_path(cl.model, field_name)[-1]
+ field_verbose_name = field.verbose_name
if isinstance(field, models.DateTimeField):
dates_or_datetimes = "datetimes"
else:
@@ -418,6 +419,7 @@ def date_hierarchy(cl):
"choices": [
{"title": capfirst(formats.date_format(day, "MONTH_DAY_FORMAT"))}
],
+ "field_name": field_verbose_name,
}
elif year_lookup and month_lookup:
days = getattr(cl.queryset, dates_or_datetimes)(field_name, "day")
@@ -440,6 +442,7 @@ def date_hierarchy(cl):
}
for day in days
],
+ "field_name": field_verbose_name,
}
elif year_lookup:
months = getattr(cl.queryset, dates_or_datetimes)(field_name, "month")
@@ -457,6 +460,7 @@ def date_hierarchy(cl):
}
for month in months
],
+ "field_name": field_verbose_name,
}
else:
years = getattr(cl.queryset, dates_or_datetimes)(field_name, "year")
@@ -470,6 +474,7 @@ def date_hierarchy(cl):
}
for year in years
],
+ "field_name": field_verbose_name,
}
diff --git a/tests/admin_changelist/test_date_hierarchy.py b/tests/admin_changelist/test_date_hierarchy.py
index 94a6a8eb6c..ca3994166f 100644
--- a/tests/admin_changelist/test_date_hierarchy.py
+++ b/tests/admin_changelist/test_date_hierarchy.py
@@ -2,7 +2,8 @@ from datetime import datetime
from django.contrib.admin.options import IncorrectLookupParameters
from django.contrib.auth.models import User
-from django.test import RequestFactory, TestCase
+from django.test import RequestFactory, TestCase, override_settings
+from django.urls import reverse
from django.utils.timezone import make_aware
from .admin import EventAdmin
@@ -95,3 +96,10 @@ class DateHierarchyTests(TestCase):
self.assertRaises(IncorrectLookupParameters),
):
self.assertDateParams(invalid_query, None, None)
+
+ @override_settings(ROOT_URLCONF="admin_changelist.urls")
+ def test_label_in_hierarchy(self):
+ self.client.force_login(self.superuser)
+ Event.objects.create(date=datetime(2017, 1, 1))
+ response = self.client.get(reverse("admin:admin_changelist_event_changelist"))
+ self.assertContains(response, "Filter by date", status_code=200)