Loading django/contrib/admin/checks.py +10 −6 Original line number Diff line number Diff line Loading @@ -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') Loading django/contrib/admin/templatetags/admin_list.py +3 −2 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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 Loading docs/ref/checks.txt +1 −1 Original line number Diff line number Diff line Loading @@ -393,7 +393,7 @@ with the admin site: which is not editable through the admin. * **admin.E126**: The value of ``search_fields`` must be a list or tuple. * **admin.E127**: The value of ``date_hierarchy`` refers to ``<field name>``, which is not an attribute of ``<model>``. which does not refer to a Field. * **admin.E128**: The value of ``date_hierarchy`` must be a ``DateField`` or ``DateTimeField``. Loading docs/ref/contrib/admin/index.txt +9 −0 Original line number Diff line number Diff line Loading @@ -213,10 +213,19 @@ subclass:: date_hierarchy = 'pub_date' You can also specify a field on a related model using the ``__`` lookup, for example:: date_hierarchy = 'author__pub_date' This will intelligently populate itself based on available data, e.g. if all the dates are in one month, it'll show the day-level drill-down only. .. versionchanged:: 1.11 The ability to reference fields on related models was added. .. note:: ``date_hierarchy`` uses :meth:`QuerySet.datetimes() Loading docs/releases/1.11.txt +1 −1 Original line number Diff line number Diff line Loading @@ -50,7 +50,7 @@ Minor features :mod:`django.contrib.admin` ~~~~~~~~~~~~~~~~~~~~~~~~~~~ * ... * :attr:`.ModelAdmin.date_hierarchy` can now reference fields across relations. :mod:`django.contrib.admindocs` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Loading Loading
django/contrib/admin/checks.py +10 −6 Original line number Diff line number Diff line Loading @@ -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') Loading
django/contrib/admin/templatetags/admin_list.py +3 −2 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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 Loading
docs/ref/checks.txt +1 −1 Original line number Diff line number Diff line Loading @@ -393,7 +393,7 @@ with the admin site: which is not editable through the admin. * **admin.E126**: The value of ``search_fields`` must be a list or tuple. * **admin.E127**: The value of ``date_hierarchy`` refers to ``<field name>``, which is not an attribute of ``<model>``. which does not refer to a Field. * **admin.E128**: The value of ``date_hierarchy`` must be a ``DateField`` or ``DateTimeField``. Loading
docs/ref/contrib/admin/index.txt +9 −0 Original line number Diff line number Diff line Loading @@ -213,10 +213,19 @@ subclass:: date_hierarchy = 'pub_date' You can also specify a field on a related model using the ``__`` lookup, for example:: date_hierarchy = 'author__pub_date' This will intelligently populate itself based on available data, e.g. if all the dates are in one month, it'll show the day-level drill-down only. .. versionchanged:: 1.11 The ability to reference fields on related models was added. .. note:: ``date_hierarchy`` uses :meth:`QuerySet.datetimes() Loading
docs/releases/1.11.txt +1 −1 Original line number Diff line number Diff line Loading @@ -50,7 +50,7 @@ Minor features :mod:`django.contrib.admin` ~~~~~~~~~~~~~~~~~~~~~~~~~~~ * ... * :attr:`.ModelAdmin.date_hierarchy` can now reference fields across relations. :mod:`django.contrib.admindocs` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Loading