summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-09-03 03:48:25 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-09-03 03:48:25 +0000
commit61cc4a1eeefe734e258c968293529ab070d4d76a (patch)
treea875e609aa60160847077fd8c432eb3542791dc0
parentd2ca6fd54eace38b8ecee8341ad88b1f9284b37f (diff)
Fixed #8819 -- Don't include two copies of extra-select columns in the query.
This was triggered by r8794, but was, in fact, fairly fragile before then. The current fix is the correct way we should be doing this. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8898 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/models/sql/query.py2
-rw-r--r--tests/regressiontests/extra_regress/models.py9
2 files changed, 10 insertions, 1 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index bd723f69d9..ceaf65cd4d 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -630,7 +630,7 @@ class Query(object):
else:
col, order = get_order_dir(field, asc)
elt = qn2(col)
- if distinct and elt not in select_aliases:
+ if distinct and col not in select_aliases:
ordering_aliases.append(elt)
result.append('%s %s' % (elt, order))
self.ordering_aliases = ordering_aliases
diff --git a/tests/regressiontests/extra_regress/models.py b/tests/regressiontests/extra_regress/models.py
index 8ee06bed32..1d31fb267a 100644
--- a/tests/regressiontests/extra_regress/models.py
+++ b/tests/regressiontests/extra_regress/models.py
@@ -98,4 +98,13 @@ True
>>> Order.objects.extra(where=["username=%s"], params=["fred"], tables=["auth_user"]).order_by('created_by')
[]
+# Regression test for #8819: Fields in the extra(select=...) list should be
+# available to extra(order_by=...).
+>>> User.objects.extra(select={'extra_field': 1}).distinct()
+[<User: fred>]
+>>> User.objects.extra(select={'extra_field': 1}, order_by=['extra_field'])
+[<User: fred>]
+>>> User.objects.extra(select={'extra_field': 1}, order_by=['extra_field']).distinct()
+[<User: fred>]
+
"""}