diff options
| author | Vytis Banaitis <vytis.banaitis@gmail.com> | 2016-05-05 20:52:54 +0300 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-06-04 12:14:02 -0400 |
| commit | 2f9c4e2b6fab3ce08cfbebff79d758196250790c (patch) | |
| tree | 550e125782fed8aed39589882c426b9178f78d4e /django | |
| parent | 89ca1128840a2ae011109cbf38ea5ee9549f1533 (diff) | |
Fixed #19963 -- Added support for date_hierarchy across relations.
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/admin/checks.py | 16 | ||||
| -rw-r--r-- | django/contrib/admin/templatetags/admin_list.py | 5 |
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 |
