From 530434f7ba6149c3073263548c42c3afe4a3de54 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 22 Jun 2010 18:08:38 +0000 Subject: [PATCH] [soc2010/query-refactor] Fixed __isnull. git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2010/query-refactor@13380 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/mongodb/compiler.py | 8 +++--- tests/regressiontests/mongodb/tests.py | 35 ++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/django/contrib/mongodb/compiler.py b/django/contrib/mongodb/compiler.py index 7b3f382de1..4a42e677a5 100644 --- a/django/contrib/mongodb/compiler.py +++ b/django/contrib/mongodb/compiler.py @@ -6,9 +6,9 @@ from django.db.models.sql.datastructures import FullResultSet # TODO: ... class SQLCompiler(object): LOOKUP_TYPES = { - "exact": lambda params: params[0], - "lt": lambda params: {"$lt": params[0]}, - "isnull": lambda params: params[0] + "exact": lambda params, value_annotation, negated: params[0], + "lt": lambda params, value_annotation, negated: {"$lt": params[0]}, + "isnull": lambda params, value_annotation, negated: {"$ne": None} if value_annotation == negated else None, } def __init__(self, query, connection, using): @@ -49,7 +49,7 @@ class SQLCompiler(object): if column == self.query.model._meta.pk.column: column = "_id" - return column, self.LOOKUP_TYPES[lookup_type](params) + return column, self.LOOKUP_TYPES[lookup_type](params, value_annotation, negated) def negate(self, k, v): if isinstance(v, dict): diff --git a/tests/regressiontests/mongodb/tests.py b/tests/regressiontests/mongodb/tests.py index e8024c2d61..255d72acef 100644 --- a/tests/regressiontests/mongodb/tests.py +++ b/tests/regressiontests/mongodb/tests.py @@ -189,3 +189,38 @@ class MongoTestCase(TestCase): ], lambda g: g.name, ) + + def test_isnull(self): + q = Group.objects.create(name="Queen", year_formed=1971) + e = Group.objects.create(name="The E Street Band", year_formed=1972) + b = Group.objects.create(name="The Beatles") + + self.assertQuerysetEqual( + Group.objects.filter(year_formed__isnull=True), [ + "The Beatles", + ], + lambda g: g.name, + ) + + self.assertQuerysetEqual( + Group.objects.filter(year_formed__isnull=False), [ + "Queen", + "The E Street Band", + ], + lambda g: g.name + ) + + self.assertQuerysetEqual( + Group.objects.exclude(year_formed__isnull=True), [ + "Queen", + "The E Street Band", + ], + lambda g: g.name + ) + + self.assertQuerysetEqual( + Group.objects.exclude(year_formed__isnull=False), [ + "The Beatles", + ], + lambda g: g.name + )