diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index d5938795..c5997cf6 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -37,12 +37,16 @@ class QuerySet(object): for key, value in query.items(): parts = key.split('__') # Check for an operator and transform to mongo-style if there is + op = None if parts[-1] in operators: op = parts.pop() value = {'$' + op: value} 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 diff --git a/tests/document.py b/tests/document.py index 3dc91f36..c20e9b33 100644 --- a/tests/document.py +++ b/tests/document.py @@ -246,6 +246,8 @@ class DocumentTest(unittest.TestCase): content = StringField() author = ReferenceField(self.Person) + BlogPost.drop_collection() + author = self.Person(name='Test User') author.save() diff --git a/tests/queryset.py b/tests/queryset.py index 2c650b4c..344ee65d 100644 --- a/tests/queryset.py +++ b/tests/queryset.py @@ -31,6 +31,10 @@ class QuerySetTest(unittest.TestCase): {'name': 'test', 'age': 30}) self.assertEqual(QuerySet._transform_query(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), {'friend.age': {'$gte': 30}}) self.assertEqual(QuerySet._transform_query(name__exists=True),