From adc57632bc26cc8fe42bdb6aff463f883214980a Mon Sep 17 00:00:00 2001 From: Anssi Kääriäinen Date: Tue, 5 May 2015 14:44:33 +0300 Subject: 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). --- django/db/models/sql/compiler.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'django/db/models/sql') diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py index 7ada8e85d0..291ce8298f 100644 --- a/django/db/models/sql/compiler.py +++ b/django/db/models/sql/compiler.py @@ -143,9 +143,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: # MySQLism: Columns in HAVING clause must be added to the GROUP BY. expressions = [pk] + [expr for expr in expressions if expr in having] -- cgit v1.3