summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorpegler <pegler@gmail.com>2013-12-05 11:46:25 -0500
committerSimon Charette <charette.s@gmail.com>2013-12-06 14:12:38 -0500
commit38e24d680d28b92997def9ab46a961d09bb81dce (patch)
tree3326fc7c8097283e2d5f9f3efa42604b2cb54b65 /django
parentb63acdfe7123c243b28e15f29e5b7a8487d69221 (diff)
Fixed #21554 -- Incorrect SQL generated when using multiple inheritance.
Diffstat (limited to 'django')
-rw-r--r--django/db/models/sql/compiler.py19
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):