From 61cc4a1eeefe734e258c968293529ab070d4d76a Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Wed, 3 Sep 2008 03:48:25 +0000 Subject: [PATCH] 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 --- django/db/models/sql/query.py | 2 +- tests/regressiontests/extra_regress/models.py | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) 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.objects.extra(select={'extra_field': 1}, order_by=['extra_field']) +[] +>>> User.objects.extra(select={'extra_field': 1}, order_by=['extra_field']).distinct() +[] + """}