Commits

Anonymous committed cdaa250

[soc2010/query-refactor] Fixed __isnull.

  • Participants
  • Parent commits 9a4b6ea
  • Branches soc2010/query-refactor

Comments (0)

Files changed (2)

File django/contrib/mongodb/compiler.py

 # 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):
         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):

File tests/regressiontests/mongodb/tests.py

             ],
             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
+        )