summaryrefslogtreecommitdiff
path: root/django/db/models/sql
diff options
context:
space:
mode:
authorFrançois Freitag <mail@franek.fr>2016-10-26 18:01:37 -0400
committerTim Graham <timograham@gmail.com>2017-02-09 11:20:33 -0500
commite124d2da94cc1233729d8f0200809589f6c5afc8 (patch)
tree260c6245a9e66e1d77ede7ce9676b0373e3b897f /django/db/models/sql
parentad36e5480d6cafb4031e8eb0bacc3a07d2fe4609 (diff)
Fixed #26551 -- Fixed negated Q() queries that span relations.
Prevented queries from reusing trimmed joins.
Diffstat (limited to 'django/db/models/sql')
-rw-r--r--django/db/models/sql/query.py6
1 files changed, 4 insertions, 2 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index f76519401b..9040c5a5a4 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -1192,10 +1192,12 @@ class Query:
return self.split_exclude(filter_expr, LOOKUP_SEP.join(parts[:e.level]),
can_reuse, e.names_with_path)
- if can_reuse is not None:
- can_reuse.update(join_list)
+ # Update used_joins before trimming since they are reused to determine
+ # which joins could be later promoted to INNER.
used_joins = set(used_joins).union(set(join_list))
targets, alias, join_list = self.trim_joins(sources, join_list, path)
+ if can_reuse is not None:
+ can_reuse.update(join_list)
if field.is_relation:
# No support for transforms for relational fields