summaryrefslogtreecommitdiff
path: root/django/db/models/sql/compiler.py
diff options
context:
space:
mode:
authorAnssi Kääriäinen <anssi.kaariainen@thl.fi>2015-04-15 08:46:19 +0300
committerClaude Paroz <claude@2xlibre.net>2015-04-16 09:42:42 +0200
commit70ff455a35066a1b6e2db03f211f56c7b38285eb (patch)
tree3f8debc69b22f2db6f6a84109fd803a6d2661afe /django/db/models/sql/compiler.py
parentc38d8f0f871e3117c1f8f32d87f3b135b7891412 (diff)
[1.8.x] Fixed #24615 -- ordering by expression not part of SELECT
Fixed queries where an expression was used in order_by() but the expression wasn't in the query's select clause (for example the expression could be masked by .values() call) Thanks to Trac alias MattBlack85 for the report. Backport of fb5c7748da from master.
Diffstat (limited to 'django/db/models/sql/compiler.py')
-rw-r--r--django/db/models/sql/compiler.py7
1 files changed, 7 insertions, 0 deletions
diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py
index f1bb10e228..a695025167 100644
--- a/django/db/models/sql/compiler.py
+++ b/django/db/models/sql/compiler.py
@@ -253,10 +253,17 @@ class SQLCompiler(object):
descending = True if order == 'DESC' else False
if col in self.query.annotation_select:
+ # Reference to expression in SELECT clause
order_by.append((
OrderBy(Ref(col, self.query.annotation_select[col]), descending=descending),
True))
continue
+ if col in self.query.annotations:
+ # References to an expression which is masked out of the SELECT clause
+ order_by.append((
+ OrderBy(self.query.annotations[col], descending=descending),
+ False))
+ continue
if '.' in field:
# This came in through an extra(order_by=...) addition. Pass it