From 72c6a434038862c90e91a2087fbc38e1c48038d9 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 19 Jun 2010 01:36:13 +0000 Subject: [PATCH] [soc2010/query-refactor] Implemented __lt lookups for MongoDB. git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2010/query-refactor@13359 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/mongodb/compiler.py | 4 +++- tests/regressiontests/mongodb/tests.py | 28 +++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/django/contrib/mongodb/compiler.py b/django/contrib/mongodb/compiler.py index bcd67b17a18f8..9636711f6b7a0 100644 --- a/django/contrib/mongodb/compiler.py +++ b/django/contrib/mongodb/compiler.py @@ -25,7 +25,7 @@ def get_filters(self, where, correct=False): 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 @@ def make_atom(self, lhs, lookup_type, value_annotation, params_or_value, negated 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 93adcecd584ed..f6729f6d8df49 100644 --- a/tests/regressiontests/mongodb/tests.py +++ b/tests/regressiontests/mongodb/tests.py @@ -58,7 +58,7 @@ def test_foreignkey(self): 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 @@ def test_lookup(self): ], 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 + ) +