diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py index fe4249ae5b..4fd9c45a57 100644 --- a/django/contrib/admin/templatetags/admin_list.py +++ b/django/contrib/admin/templatetags/admin_list.py @@ -130,7 +130,7 @@ def result_headers(cl): admin_order_field = getattr(attr, "admin_order_field", None) # Set ordering for attr that is a property, if defined. if isinstance(attr, property) and hasattr(attr, 'fget'): - admin_order_field = getattr(attr.fget, 'admin_order_field') + admin_order_field = getattr(attr.fget, 'admin_order_field', None) if not admin_order_field: is_field_sortable = False diff --git a/tests/admin_views/admin.py b/tests/admin_views/admin.py index 3e8df5b7c2..8f0aaf843f 100644 --- a/tests/admin_views/admin.py +++ b/tests/admin_views/admin.py @@ -104,7 +104,7 @@ class ArticleAdmin(admin.ModelAdmin): list_display = ( 'content', 'date', callable_year, 'model_year', 'modeladmin_year', 'model_year_reversed', 'section', lambda obj: obj.title, - 'order_by_expression', 'model_property_year', + 'order_by_expression', 'model_property_year', 'model_month', ) list_editable = ('section',) list_filter = ('date', 'section') diff --git a/tests/admin_views/models.py b/tests/admin_views/models.py index aaf86ea1cd..9ac3c53bab 100644 --- a/tests/admin_views/models.py +++ b/tests/admin_views/models.py @@ -60,6 +60,10 @@ class Article(models.Model): property_year.admin_order_field = 'date' model_property_year = property(property_year) + @property + def model_month(self): + return self.date.month + class Book(models.Model): """