From 13afead9fb43ff6c1150bd21a5084b260116596a Mon Sep 17 00:00:00 2001 From: Dan Crosta Date: Wed, 20 Jul 2011 12:41:20 -0400 Subject: [PATCH] add where() method to QuerySet --- mongoengine/queryset.py | 5 +++++ tests/queryset.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index 11c7a804..b1185ee0 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -1397,6 +1397,11 @@ class QuerySet(object): db = _get_db() return db.eval(code, *fields) + def where(self, where_clause): + where_clause = self._sub_js_fields(where_clause) + self._where_clause = where_clause + return self + def sum(self, field): """Sum over the values of the specified field. diff --git a/tests/queryset.py b/tests/queryset.py index a21bae69..ce64a004 100644 --- a/tests/queryset.py +++ b/tests/queryset.py @@ -2502,6 +2502,34 @@ class QuerySetTest(unittest.TestCase): for key, value in info.iteritems()] self.assertTrue(([('_types', 1), ('message', 1)], False, False) in info) + def test_where(self): + """Ensure that where clauses work. + """ + + class IntPair(Document): + fielda = IntField() + fieldb = IntField() + + IntPair.objects._collection.remove() + + a = IntPair(fielda=1, fieldb=1) + b = IntPair(fielda=1, fieldb=2) + c = IntPair(fielda=2, fieldb=1) + a.save() + b.save() + c.save() + + query = IntPair.objects.where('this[~fielda] >= this[~fieldb]') + self.assertEqual('this["fielda"] >= this["fieldb"]', query._where_clause) + results = list(query) + self.assertEqual(2, len(results)) + self.assertTrue(a in results) + self.assertTrue(c in results) + + query = IntPair.objects.where('this[~fielda] == this[~fieldb]') + results = list(query) + self.assertEqual(1, len(results)) + self.assertTrue(a in results) class QTest(unittest.TestCase):