summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorVytis Banaitis <vytis.banaitis@gmail.com>2016-05-05 20:52:54 +0300
committerTim Graham <timograham@gmail.com>2016-06-04 12:14:02 -0400
commit2f9c4e2b6fab3ce08cfbebff79d758196250790c (patch)
tree550e125782fed8aed39589882c426b9178f78d4e /django
parent89ca1128840a2ae011109cbf38ea5ee9549f1533 (diff)
Fixed #19963 -- Added support for date_hierarchy across relations.
Diffstat (limited to 'django')
-rw-r--r--django/contrib/admin/checks.py16
-rw-r--r--django/contrib/admin/templatetags/admin_list.py5
2 files changed, 13 insertions, 8 deletions
diff --git a/django/contrib/admin/checks.py b/django/contrib/admin/checks.py
index 87788c8f30..6d338281a7 100644
--- a/django/contrib/admin/checks.py
+++ b/django/contrib/admin/checks.py
@@ -840,12 +840,16 @@ class ModelAdminChecks(BaseModelAdminChecks):
return []
else:
try:
- field = obj.model._meta.get_field(obj.date_hierarchy)
- except FieldDoesNotExist:
- return refer_to_missing_field(
- option='date_hierarchy', field=obj.date_hierarchy,
- model=obj.model, obj=obj, id='admin.E127',
- )
+ field = get_fields_from_path(obj.model, obj.date_hierarchy)[-1]
+ except (NotRelationField, FieldDoesNotExist):
+ return [
+ checks.Error(
+ "The value of 'date_hierarchy' refers to '%s', which "
+ "does not refer to a Field." % obj.date_hierarchy,
+ obj=obj.__class__,
+ id='admin.E127',
+ )
+ ]
else:
if not isinstance(field, (models.DateField, models.DateTimeField)):
return must_be('a DateField or DateTimeField', option='date_hierarchy', obj=obj, id='admin.E128')
diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py
index c8ebccfd25..63b428ec68 100644
--- a/django/contrib/admin/templatetags/admin_list.py
+++ b/django/contrib/admin/templatetags/admin_list.py
@@ -5,7 +5,8 @@ import warnings
from django.contrib.admin.templatetags.admin_urls import add_preserved_filters
from django.contrib.admin.utils import (
- display_for_field, display_for_value, label_for_field, lookup_field,
+ display_for_field, display_for_value, get_fields_from_path,
+ label_for_field, lookup_field,
)
from django.contrib.admin.views.main import (
ALL_VAR, ORDER_VAR, PAGE_VAR, SEARCH_VAR,
@@ -346,7 +347,7 @@ def date_hierarchy(cl):
"""
if cl.date_hierarchy:
field_name = cl.date_hierarchy
- field = cl.opts.get_field(field_name)
+ field = get_fields_from_path(cl.model, field_name)[-1]
dates_or_datetimes = 'datetimes' if isinstance(field, models.DateTimeField) else 'dates'
year_field = '%s__year' % field_name
month_field = '%s__month' % field_name