[Django] #30259: admin_order_field not working with properties

20 views
Skip to first unread message

Django

unread,
Mar 16, 2019, 12:45:07 PM3/16/19
to django-...@googlegroups.com
#30259: admin_order_field not working with properties
-----------------------------------------+------------------------
Reporter: Tobias Wiese | Owner: nobody
Type: Bug | Status: new
Component: contrib.admin | Version: 2.1
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 1
UI/UX: 0 |
-----------------------------------------+------------------------
The `ModelAdmin` class allows to specify properties from the model in
`list_display`.

Normally non-fields cannot be sorted. This can be changed by setting
`admin_order_field`. This doesn't work on properties, while it is possible
to do so with `short_description`.

The
[[https://github.com/django/django/blob/e4df8e6dc021fa472fa77f9b835db74810184748/django/contrib/admin/utils.py#L345|code]]
that checks for `short_description` checks if it handles a property and
returns `attr.fget.short_description` if available.

The files that check for `admin_order_field` do not handle the case that
it might be a property.

The relevant files are probably:
- django/contrib/admin/views/main.py
([[https://github.com/django/django/blob/24b82cd201e21060fbc02117dc16d1702877a1f3/django/contrib/admin/views/main.py|GitHub]])
- django/contrib/admin/templatetags/admin_list.py
([[https://github.com/django/django/blob/0004daa536890fdb389c895baaa21bea6a1f7073/django/contrib/admin/templatetags/admin_list.py|
GitHub]])

--
Ticket URL: <https://code.djangoproject.com/ticket/30259>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
Mar 19, 2019, 12:53:07 AM3/19/19
to django-...@googlegroups.com
#30259: admin_order_field not working with properties
-------------------------------+----------------------------------------
Reporter: Tobias Wiese | Owner: Jani Tiainen
Type: Bug | Status: assigned
Component: contrib.admin | Version: 2.1
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted

Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------+----------------------------------------
Changes (by Jani Tiainen):

* status: new => assigned
* owner: nobody => Jani Tiainen
* stage: Unreviewed => Accepted


--
Ticket URL: <https://code.djangoproject.com/ticket/30259#comment:1>

Django

unread,
Mar 19, 2019, 11:54:38 AM3/19/19
to django-...@googlegroups.com
#30259: admin_order_field not working with properties
-------------------------------+----------------------------------------
Reporter: Tobias Wiese | Owner: Jani Tiainen
Type: Bug | Status: assigned
Component: contrib.admin | Version: 2.1

Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------+----------------------------------------
Changes (by Jani Tiainen):

* has_patch: 0 => 1


Comment:

[https://github.com/django/django/pull/11096 PR]

--
Ticket URL: <https://code.djangoproject.com/ticket/30259#comment:2>

Django

unread,
Mar 22, 2019, 11:07:43 AM3/22/19
to django-...@googlegroups.com
#30259: admin_order_field not working with properties
-------------------------------------+-------------------------------------

Reporter: Tobias Wiese | Owner: Jani
| Tiainen
Type: Bug | Status: assigned
Component: contrib.admin | Version: 2.1
Severity: Normal | Resolution:
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Tobias Wiese):

* stage: Accepted => Ready for checkin


--
Ticket URL: <https://code.djangoproject.com/ticket/30259#comment:3>

Django

unread,
Mar 22, 2019, 5:05:24 PM3/22/19
to django-...@googlegroups.com
#30259: Support the use of admin_order_field on properties in the admin.

-------------------------------------+-------------------------------------
Reporter: Tobias Wiese | Owner: Jani
| Tiainen
Type: Bug | Status: assigned
Component: contrib.admin | Version: master

Severity: Normal | Resolution:
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by felixxm):

* version: 2.1 => master


--
Ticket URL: <https://code.djangoproject.com/ticket/30259#comment:4>

Django

unread,
Mar 24, 2019, 3:30:48 PM3/24/19
to django-...@googlegroups.com
#30259: Support the use of admin_order_field on properties in the admin.
-------------------------------------+-------------------------------------
Reporter: Tobias Wiese | Owner: Jani
| Tiainen
Type: New feature | Status: assigned

Component: contrib.admin | Version: master
Severity: Normal | Resolution:
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by felixxm):

* type: Bug => New feature


--
Ticket URL: <https://code.djangoproject.com/ticket/30259#comment:5>

Django

unread,
Mar 24, 2019, 4:03:18 PM3/24/19
to django-...@googlegroups.com
#30259: Support the use of admin_order_field on properties in the admin.
-------------------------------------+-------------------------------------
Reporter: Tobias Wiese | Owner: Jani
| Tiainen
Type: New feature | Status: closed
Component: contrib.admin | Version: master
Severity: Normal | Resolution: fixed

Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak <felisiak.mariusz@…>):

* status: assigned => closed
* resolution: => fixed


Comment:

In [changeset:"044cc544203fdcf2601ff200547ecae2e51a5db5" 044cc544]:
{{{
#!CommitTicketReference repository=""
revision="044cc544203fdcf2601ff200547ecae2e51a5db5"
Fixed #30259 -- Added support for admin_order_field attribute on
properties in ModelAdmin.list_display.
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/30259#comment:6>

Django

unread,
Mar 30, 2019, 12:38:30 PM3/30/19
to django-...@googlegroups.com
#30259: Support the use of admin_order_field on properties in the admin.
---------------------------------+----------------------------------------

Reporter: Tobias Wiese | Owner: Jani Tiainen
Type: New feature | Status: new
Component: contrib.admin | Version: master
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted

Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+----------------------------------------
Changes (by Tim Graham):

* status: closed => new
* severity: Normal => Release blocker
* easy: 1 => 0
* has_patch: 1 => 0
* resolution: fixed =>
* stage: Ready for checkin => Accepted


Comment:

A selenium test fails after the patch:
`admin_views.tests.SeleniumTests.test_list_editable_raw_id_fields`:
{{{
Traceback (most recent call last):
File "/home/tim/code/django/django/core/handlers/exception.py", line 34,
in inner
response = get_response(request)
File "/home/tim/code/django/django/core/handlers/base.py", line 145, in
_get_response
response = self.process_exception_by_middleware(e, request)
File "/home/tim/code/django/django/core/handlers/base.py", line 143, in
_get_response
response = response.render()
File "/home/tim/code/django/django/template/response.py", line 106, in
render
self.content = self.rendered_content
File "/home/tim/code/django/django/template/response.py", line 83, in
rendered_content
content = template.render(context, self._request)
File "/home/tim/code/django/django/template/backends/django.py", line
61, in render
return self.template.render(context)
File "/home/tim/code/django/django/template/base.py", line 171, in
render
return self._render(context)
File "/home/tim/code/django/django/test/utils.py", line 95, in
instrumented_test_render
return self.nodelist.render(context)
File "/home/tim/code/django/django/template/base.py", line 937, in
render
bit = node.render_annotated(context)
File "/home/tim/code/django/django/template/base.py", line 904, in
render_annotated
return self.render(context)
File "/home/tim/code/django/django/template/loader_tags.py", line 150,
in render
return compiled_parent._render(context)
File "/home/tim/code/django/django/test/utils.py", line 95, in
instrumented_test_render
return self.nodelist.render(context)
File "/home/tim/code/django/django/template/base.py", line 937, in
render
bit = node.render_annotated(context)
File "/home/tim/code/django/django/template/base.py", line 904, in
render_annotated
return self.render(context)
File "/home/tim/code/django/django/template/loader_tags.py", line 150,
in render
return compiled_parent._render(context)
File "/home/tim/code/django/django/test/utils.py", line 95, in
instrumented_test_render
return self.nodelist.render(context)
File "/home/tim/code/django/django/template/base.py", line 937, in
render
bit = node.render_annotated(context)
File "/home/tim/code/django/django/template/base.py", line 904, in
render_annotated
return self.render(context)
File "/home/tim/code/django/django/template/loader_tags.py", line 62, in
render
result = block.nodelist.render(context)
File "/home/tim/code/django/django/template/base.py", line 937, in
render
bit = node.render_annotated(context)
File "/home/tim/code/django/django/template/base.py", line 904, in
render_annotated
return self.render(context)
File "/home/tim/code/django/django/template/loader_tags.py", line 62, in
render
result = block.nodelist.render(context)
File "/home/tim/code/django/django/template/base.py", line 937, in
render
bit = node.render_annotated(context)
File "/home/tim/code/django/django/template/base.py", line 904, in
render_annotated
return self.render(context)
File "/home/tim/code/django/django/contrib/admin/templatetags/base.py",
line 33, in render
return super().render(context)
File "/home/tim/code/django/django/template/library.py", line 214, in
render
_dict = self.func(*resolved_args, **resolved_kwargs)
File
"/home/tim/code/django/django/contrib/admin/templatetags/admin_list.py",
line 332, in result_list
headers = list(result_headers(cl))
File
"/home/tim/code/django/django/contrib/admin/templatetags/admin_list.py",
line 133, in result_headers
admin_order_field = getattr(attr.fget, 'admin_order_field')
AttributeError: 'function' object has no attribute 'admin_order_field'
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/30259#comment:7>

Django

unread,
Mar 31, 2019, 8:14:59 AM3/31/19
to django-...@googlegroups.com
#30259: Support the use of admin_order_field on properties in the admin.
---------------------------------+----------------------------------------
Reporter: Tobias Wiese | Owner: Jani Tiainen
Type: New feature | Status: new
Component: contrib.admin | Version: master
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+----------------------------------------

Comment (by Jani Tiainen):

Replying to [comment:7 Tim Graham]:


> A selenium test fails after the patch:
`admin_views.tests.SeleniumTests.test_list_editable_raw_id_fields`:
> {{{

> File
"/home/tim/code/django/django/contrib/admin/templatetags/admin_list.py",
line 133, in result_headers
> admin_order_field = getattr(attr.fget, 'admin_order_field')
> AttributeError: 'function' object has no attribute 'admin_order_field'
> }}}

Apparently that `getattr` should be:
{{{
admin_order_field = getattr(attr.fget, 'admin_order_field', None)
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/30259#comment:8>

Django

unread,
Apr 1, 2019, 4:41:14 AM4/1/19
to django-...@googlegroups.com
#30259: Support the use of admin_order_field on properties in the admin.
---------------------------------+----------------------------------------
Reporter: Tobias Wiese | Owner: Jani Tiainen
Type: New feature | Status: new
Component: contrib.admin | Version: master
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+----------------------------------------
Changes (by felixxm):

* has_patch: 0 => 1


Comment:

[https://github.com/django/django/pull/11154 PR]

--
Ticket URL: <https://code.djangoproject.com/ticket/30259#comment:9>

Django

unread,
Apr 1, 2019, 9:12:25 AM4/1/19
to django-...@googlegroups.com
#30259: Support the use of admin_order_field on properties in the admin.
---------------------------------+----------------------------------------
Reporter: Tobias Wiese | Owner: Jani Tiainen
Type: New feature | Status: closed
Component: contrib.admin | Version: master
Severity: Release blocker | Resolution: fixed
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+----------------------------------------
Changes (by GitHub <noreply@…>):

* status: new => closed
* resolution: => fixed


Comment:

In [changeset:"7cbcf2e2cbca1acfccfd973f746a9e6abfc0052e" 7cbcf2e2]:
{{{
#!CommitTicketReference repository=""
revision="7cbcf2e2cbca1acfccfd973f746a9e6abfc0052e"
Fixed #30259 -- Fixed crash of admin views when properties don't have
admin_order_field attribute.
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/30259#comment:10>

Reply all
Reply to author
Forward
0 new messages