diff options
| author | Anssi Kääriäinen <akaariai@gmail.com> | 2015-05-05 14:44:33 +0300 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-05-11 11:52:14 -0400 |
| commit | d5ce2dd7bc5b797d2e338c4bc6e6f3e339b748e5 (patch) | |
| tree | 584dfffad7ce06e14634a1ed9c3b6613fa222527 /django/db/models/sql | |
| parent | 056a91dbfae9e741cd4bf033d3062d3d35ff4d90 (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')
| -rw-r--r-- | django/db/models/sql/compiler.py | 7 |
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 |
