summaryrefslogtreecommitdiff
path: root/django/db/models/sql
diff options
context:
space:
mode:
authorAnssi Kääriäinen <akaariai@gmail.com>2014-01-20 18:28:16 +0200
committerAnssi Kääriäinen <akaariai@gmail.com>2014-01-24 10:10:17 +0200
commit78a2617703bc1dada409f126db5c3db214913ff4 (patch)
tree4da69327626e3bb0b34dc4dd157f76947d6276ed /django/db/models/sql
parent16f3a6a4c7bab11644d11c2be029374e5095cb56 (diff)
Fixed #21787 -- regression in MTI .exclude() queries
Diffstat (limited to 'django/db/models/sql')
-rw-r--r--django/db/models/sql/query.py8
1 files changed, 6 insertions, 2 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index dcf89fe8bf..838c2914d9 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -1334,6 +1334,7 @@ class Query(object):
"""
path, names_with_path = [], []
for pos, name in enumerate(names):
+ cur_names_with_path = (name, [])
if name == 'pk':
name = opts.pk.name
try:
@@ -1359,19 +1360,22 @@ class Query(object):
targets = (final_field.rel.get_related_field(),)
opts = int_model._meta
path.append(PathInfo(final_field.model._meta, opts, targets, final_field, False, True))
+ cur_names_with_path[1].append(PathInfo(final_field.model._meta, opts, targets, final_field, False, True))
if hasattr(field, 'get_path_info'):
pathinfos = field.get_path_info()
if not allow_many:
for inner_pos, p in enumerate(pathinfos):
if p.m2m:
- names_with_path.append((name, pathinfos[0:inner_pos + 1]))
+ cur_names_with_path[1].extend(pathinfos[0:inner_pos + 1])
+ names_with_path.append(cur_names_with_path)
raise MultiJoin(pos + 1, names_with_path)
last = pathinfos[-1]
path.extend(pathinfos)
final_field = last.join_field
opts = last.to_opts
targets = last.target_fields
- names_with_path.append((name, pathinfos))
+ cur_names_with_path[1].extend(pathinfos)
+ names_with_path.append(cur_names_with_path)
else:
# Local non-relational field.
final_field = field