diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index 49c8f69d..8bdaf9cc 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -78,7 +78,7 @@ class SimplificationVisitor(QNodeVisitor): # to a single field intersection = ops.intersection(query_ops) if intersection: - msg = 'Duplicate query contitions: ' + msg = 'Duplicate query conditions: ' raise InvalidQueryError(msg + ', '.join(intersection)) query_ops.update(ops) @@ -179,7 +179,7 @@ class QueryCompilerVisitor(QNodeVisitor): # once to a single field intersection = current_ops.intersection(new_ops) if intersection: - msg = 'Duplicate query contitions: ' + msg = 'Duplicate query conditions: ' raise InvalidQueryError(msg + ', '.join(intersection)) # Right! We've got two non-overlapping dicts of operations! diff --git a/tests/queryset.py b/tests/queryset.py index 374fdb54..c695aa4e 100644 --- a/tests/queryset.py +++ b/tests/queryset.py @@ -539,33 +539,47 @@ class QuerySetTest(unittest.TestCase): """Ensure that Q objects may be used to query for documents. """ class BlogPost(Document): + title = StringField() publish_date = DateTimeField() published = BooleanField() BlogPost.drop_collection() - post1 = BlogPost(publish_date=datetime(2010, 1, 8), published=False) + post1 = BlogPost(title='Test 1', publish_date=datetime(2010, 1, 8), published=False) post1.save() - post2 = BlogPost(publish_date=datetime(2010, 1, 15), published=True) + post2 = BlogPost(title='Test 2', publish_date=datetime(2010, 1, 15), published=True) post2.save() - post3 = BlogPost(published=True) + post3 = BlogPost(title='Test 3', published=True) post3.save() - post4 = BlogPost(publish_date=datetime(2010, 1, 8)) + post4 = BlogPost(title='Test 4', publish_date=datetime(2010, 1, 8)) post4.save() - post5 = BlogPost(publish_date=datetime(2010, 1, 15)) + post5 = BlogPost(title='Test 1', publish_date=datetime(2010, 1, 15)) post5.save() - post6 = BlogPost(published=False) + post6 = BlogPost(title='Test 1', published=False) post6.save() # Check ObjectId lookup works obj = BlogPost.objects(id=post1.id).first() self.assertEqual(obj, post1) + # Check Q object combination with one does not exist + q = BlogPost.objects(Q(title='Test 5') | Q(published=True)) + posts = [post.id for post in q] + + published_posts = (post2, post3) + self.assertTrue(all(obj.id in posts for obj in published_posts)) + + q = BlogPost.objects(Q(title='Test 1') | Q(published=True)) + posts = [post.id for post in q] + published_posts = (post1, post2, post3, post5, post6) + self.assertTrue(all(obj.id in posts for obj in published_posts)) + + # Check Q object combination date = datetime(2010, 1, 10) q = BlogPost.objects(Q(publish_date__lte=date) | Q(published=True))