summaryrefslogtreecommitdiff
path: root/django/contrib/admin
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2018-06-14 14:22:04 -0400
committerTim Graham <timograham@gmail.com>2018-06-14 14:22:04 -0400
commit0d8e3e608ee9aab5076d497664aa97e0a29e523e (patch)
tree803ec16cb7263dd845900185dc1eb9fd1fc6a1ac /django/contrib/admin
parenta77f21880dfb0631ea0adb22d47909915cbfc3a9 (diff)
Fixed #29428 -- Fixed admin changelist crash when using a query expression without asc()/desc() in the ordering.
Diffstat (limited to 'django/contrib/admin')
-rw-r--r--django/contrib/admin/views/main.py6
1 files changed, 4 insertions, 2 deletions
diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
index cbbe45a5c7..3febd42fb9 100644
--- a/django/contrib/admin/views/main.py
+++ b/django/contrib/admin/views/main.py
@@ -17,7 +17,7 @@ from django.core.exceptions import (
)
from django.core.paginator import InvalidPage
from django.db import models
-from django.db.models.expressions import F, OrderBy
+from django.db.models.expressions import Combinable, F, OrderBy
from django.urls import reverse
from django.utils.http import urlencode
from django.utils.timezone import make_aware
@@ -326,7 +326,9 @@ class ChangeList:
# the right column numbers absolutely, because there might be more
# than one column associated with that ordering, so we guess.
for field in ordering:
- if isinstance(field, OrderBy):
+ if isinstance(field, (Combinable, OrderBy)):
+ if not isinstance(field, OrderBy):
+ field = field.asc()
if isinstance(field.expression, F):
order_type = 'desc' if field.descending else 'asc'
field = field.expression.name