diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index 3db23baa..72a474d7 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -59,6 +59,8 @@ class Q(object): def _combine(self, other, op): obj = Q() + if not other.query[0]: + return self if self.query[0]: obj.query = ['('] + copy.deepcopy(self.query) + [op] + copy.deepcopy(other.query) + [')'] else: diff --git a/tests/queryset.py b/tests/queryset.py index df2e2e74..9daa73ec 100644 --- a/tests/queryset.py +++ b/tests/queryset.py @@ -1160,17 +1160,19 @@ class QTest(unittest.TestCase): self.assertEqual(scope, test_scope) def test_empty_q(self): - """Ensure that starting with an empty Q object won't hurt. + """Ensure that empty Q objects won't hurt. """ q1 = Q() q2 = Q(age__gte=18) - q3 = Q(name='test') + q3 = Q() + q4 = Q(name='test') + q5 = Q() query = ['(', {'age__gte': 18}, '||', {'name': 'test'}, ')'] - self.assertEqual((q1 | q2 | q3).query, query) + self.assertEqual((q1 | q2 | q3 | q4 | q5).query, query) query = ['(', {'age__gte': 18}, '&&', {'name': 'test'}, ')'] - self.assertEqual((q1 & q2 & q3).query, query) + self.assertEqual((q1 & q2 & q3 & q4 & q5).query, query) if __name__ == '__main__': unittest.main()