From cae24af822cabba1ca35bf95150220f7aa8aca24 Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Sun, 14 Oct 2007 02:16:08 +0000 Subject: [PATCH] queryset-refactor: Previous exclude() fixing broke the simple case. Fixed that (the lookup tests picked this up). git-svn-id: http://code.djangoproject.com/svn/django/branches/queryset-refactor@6496 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/sql/query.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index ff0da5e6e2..9f4edff7cf 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -570,11 +570,10 @@ class Query(object): if name == 'pk': name = target_field.name if joins is not None: - join_list.append(joins) - last = joins - alias = joins[-1] - if not null_point and nullable: + if null_point is None and nullable: null_point = len(join_list) + join_list.append(joins) + alias = joins[-1] if connection == OR and not split: # FIXME: Document what's going on and why this is needed. if self.alias_map[joins[0]][ALIAS_REFCOUNT] == 1: @@ -616,12 +615,15 @@ class Query(object): self.where.add([alias, col, orig_field, lookup_type, value], connection) - if negate and null_point: - if join_list: - for join in last: - self.promote_alias(join) - self.where.negate() - self.where.add([alias, col, orig_field, 'isnull', True], OR) + if negate: + if join_list and null_point is not None: + for elt in join_list[null_point:]: + for join in elt: + self.promote_alias(join) + self.where.negate() + self.where.add([alias, col, orig_field, 'isnull', True], OR) + else: + self.where.negate() def add_q(self, q_object): """