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
This commit is contained in:
Malcolm Tredinnick 2008-09-03 03:48:25 +00:00
parent d2ca6fd54e
commit 61cc4a1eee
2 changed files with 10 additions and 1 deletions

View File

@ -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

View File

@ -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>]
"""}