add where() method to QuerySet

This commit is contained in:
Dan Crosta 2011-07-20 12:41:20 -04:00
parent 72aa191e70
commit 13afead9fb
2 changed files with 33 additions and 0 deletions

View File

@ -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.

View File

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