add where() method to QuerySet
This commit is contained in:
parent
72aa191e70
commit
13afead9fb
@ -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.
|
||||
|
||||
|
@ -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):
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user