mirror of
https://github.com/django/django.git
synced 2025-10-24 22:26:08 +00:00
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).
This commit is contained in:
committed by
Tim Graham
parent
be9d645346
commit
adc57632bc
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user