Queries may now use multiple operators on fields
This commit is contained in:
parent
d46191159e
commit
1529fd901d
@ -37,12 +37,16 @@ class QuerySet(object):
|
|||||||
for key, value in query.items():
|
for key, value in query.items():
|
||||||
parts = key.split('__')
|
parts = key.split('__')
|
||||||
# Check for an operator and transform to mongo-style if there is
|
# Check for an operator and transform to mongo-style if there is
|
||||||
|
op = None
|
||||||
if parts[-1] in operators:
|
if parts[-1] in operators:
|
||||||
op = parts.pop()
|
op = parts.pop()
|
||||||
value = {'$' + op: value}
|
value = {'$' + op: value}
|
||||||
|
|
||||||
key = '.'.join(parts)
|
key = '.'.join(parts)
|
||||||
mongo_query[key] = value
|
if op is None or key not in mongo_query:
|
||||||
|
mongo_query[key] = value
|
||||||
|
elif key in mongo_query and isinstance(mongo_query[key], dict):
|
||||||
|
mongo_query[key].update(value)
|
||||||
|
|
||||||
return mongo_query
|
return mongo_query
|
||||||
|
|
||||||
|
@ -246,6 +246,8 @@ class DocumentTest(unittest.TestCase):
|
|||||||
content = StringField()
|
content = StringField()
|
||||||
author = ReferenceField(self.Person)
|
author = ReferenceField(self.Person)
|
||||||
|
|
||||||
|
BlogPost.drop_collection()
|
||||||
|
|
||||||
author = self.Person(name='Test User')
|
author = self.Person(name='Test User')
|
||||||
author.save()
|
author.save()
|
||||||
|
|
||||||
|
@ -31,6 +31,10 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
{'name': 'test', 'age': 30})
|
{'name': 'test', 'age': 30})
|
||||||
self.assertEqual(QuerySet._transform_query(age__lt=30),
|
self.assertEqual(QuerySet._transform_query(age__lt=30),
|
||||||
{'age': {'$lt': 30}})
|
{'age': {'$lt': 30}})
|
||||||
|
self.assertEqual(QuerySet._transform_query(age__gt=20, age__lt=50),
|
||||||
|
{'age': {'$gt': 20, '$lt': 50}})
|
||||||
|
self.assertEqual(QuerySet._transform_query(age=20, age__gt=50),
|
||||||
|
{'age': 20})
|
||||||
self.assertEqual(QuerySet._transform_query(friend__age__gte=30),
|
self.assertEqual(QuerySet._transform_query(friend__age__gte=30),
|
||||||
{'friend.age': {'$gte': 30}})
|
{'friend.age': {'$gte': 30}})
|
||||||
self.assertEqual(QuerySet._transform_query(name__exists=True),
|
self.assertEqual(QuerySet._transform_query(name__exists=True),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user