diff options
| author | pegler <pegler@gmail.com> | 2013-12-05 11:46:25 -0500 |
|---|---|---|
| committer | Simon Charette <charette.s@gmail.com> | 2013-12-06 14:12:38 -0500 |
| commit | 38e24d680d28b92997def9ab46a961d09bb81dce (patch) | |
| tree | 3326fc7c8097283e2d5f9f3efa42604b2cb54b65 /django | |
| parent | b63acdfe7123c243b28e15f29e5b7a8487d69221 (diff) | |
Fixed #21554 -- Incorrect SQL generated when using multiple inheritance.
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/models/sql/compiler.py | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py index 98b953937f..7e48adb1d6 100644 --- a/django/db/models/sql/compiler.py +++ b/django/db/models/sql/compiler.py @@ -284,25 +284,32 @@ class SQLCompiler(object): continue alias = self.query.join_parent_model(opts, model, start_alias, seen_models) + column = field.column + for seen_model, seen_alias in seen_models.items(): + if seen_model and seen_alias == alias: + ancestor_link = seen_model._meta.get_ancestor_link(model) + if ancestor_link: + column = ancestor_link.column + break table = self.query.alias_map[alias].table_name - if table in only_load and field.column not in only_load[table]: + if table in only_load and column not in only_load[table]: continue if as_pairs: - result.append((alias, field.column)) + result.append((alias, column)) aliases.add(alias) continue - if with_aliases and field.column in col_aliases: + if with_aliases and column in col_aliases: c_alias = 'Col%d' % len(col_aliases) result.append('%s.%s AS %s' % (qn(alias), - qn2(field.column), c_alias)) + qn2(column), c_alias)) col_aliases.add(c_alias) aliases.add(c_alias) else: - r = '%s.%s' % (qn(alias), qn2(field.column)) + r = '%s.%s' % (qn(alias), qn2(column)) result.append(r) aliases.add(r) if with_aliases: - col_aliases.add(field.column) + col_aliases.add(column) return result, aliases def get_distinct(self): |
