diff --git a/django/contrib/mongodb/compiler.py b/django/contrib/mongodb/compiler.py index bcd67b17a1..9636711f6b 100644 --- a/django/contrib/mongodb/compiler.py +++ b/django/contrib/mongodb/compiler.py @@ -25,7 +25,7 @@ class SQLCompiler(object): return filters def make_atom(self, lhs, lookup_type, value_annotation, params_or_value, negated): - assert lookup_type in ["exact", "isnull"], lookup_type + assert lookup_type in ["exact", "isnull", "lt"], lookup_type if hasattr(lhs, "process"): lhs, params = lhs.process(lookup_type, params_or_value, self.connection) else: @@ -47,6 +47,8 @@ class SQLCompiler(object): if value_annotation == negated: val = {"$not": val} return column, val + elif lookup_type == "lt": + return column, {"$lt": params[0]} def correct_filters(self, filters): for k, v in filters.items(): diff --git a/tests/regressiontests/mongodb/tests.py b/tests/regressiontests/mongodb/tests.py index 93adcecd58..f6729f6d8d 100644 --- a/tests/regressiontests/mongodb/tests.py +++ b/tests/regressiontests/mongodb/tests.py @@ -58,7 +58,7 @@ class MongoTestCase(TestCase): self.assertFalse(hasattr(b, "_current_group_cache")) self.assertEqual(b.current_group, e) - def test_lookup(self): + def test_not_equals(self): q = Group.objects.create(name="Queen", year_formed=1971) e = Group.objects.create(name="The E Street Band", year_formed=1972) @@ -80,3 +80,29 @@ class MongoTestCase(TestCase): ], lambda g: g.name, ) + + def test_less_than(self): + q = Group.objects.create(name="Queen", year_formed=1971) + e = Group.objects.create(name="The E Street Band", year_formed=1972) + + self.assertQuerysetEqual( + Group.objects.filter(year_formed__lt=1980), [ + "Queen", + "The E Street Band", + ], + lambda g: g.name + ) + + self.assertQuerysetEqual( + Group.objects.filter(year_formed__lt=1972), [ + "Queen", + ], + lambda g: g.name + ) + + self.assertQuerysetEqual( + Group.objects.filter(year_formed__lt=1971), + [], + lambda g: g.name + ) +