From e124d2da94cc1233729d8f0200809589f6c5afc8 Mon Sep 17 00:00:00 2001 From: François Freitag Date: Wed, 26 Oct 2016 18:01:37 -0400 Subject: Fixed #26551 -- Fixed negated Q() queries that span relations. Prevented queries from reusing trimmed joins. --- django/db/models/sql/query.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'django/db/models/sql') 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 -- cgit v1.3