summaryrefslogtreecommitdiff
path: root/django/db/models/sql/compiler.py
diff options
context:
space:
mode:
authorAnssi Kääriäinen <akaariai@gmail.com>2015-05-05 14:44:33 +0300
committerTim Graham <timograham@gmail.com>2015-05-11 11:52:14 -0400
commitd5ce2dd7bc5b797d2e338c4bc6e6f3e339b748e5 (patch)
tree584dfffad7ce06e14634a1ed9c3b6613fa222527 /django/db/models/sql/compiler.py
parent056a91dbfae9e741cd4bf033d3062d3d35ff4d90 (diff)
[1.8.x] Fixed #24748 -- Fixed incorrect GROUP BY on MySQL in some queries
When the query's model had a self-referential foreign key, the compiler.get_group_by() code incorrectly used the self-referential foreign key's column (for example parent_id) as GROUP BY clause when it should have used the model's primary key column (id). Backport of adc57632bc26cc8fe42bdb6aff463f883214980a from master
Diffstat (limited to 'django/db/models/sql/compiler.py')
-rw-r--r--django/db/models/sql/compiler.py7
1 files changed, 5 insertions, 2 deletions
diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py
index 810031f47e..6aab204598 100644
--- a/django/db/models/sql/compiler.py
+++ b/django/db/models/sql/compiler.py
@@ -145,9 +145,12 @@ class SQLCompiler(object):
# then also add having expressions to group by.
pk = None
for expr in expressions:
- if (expr.output_field.primary_key and
- getattr(expr.output_field, 'model') == self.query.model):
+ # Is this a reference to query's base table primary key? If the
+ # expression isn't a Col-like, then skip the expression.
+ if (getattr(expr, 'target', None) == self.query.model._meta.pk and
+ getattr(expr, 'alias', None) == self.query.tables[0]):
pk = expr
+ break
if pk:
expressions = [pk] + [expr for expr in expressions if expr in having]
return expressions