From 5e8604967c5eabb9a71f0b3a87f39e37d6f589bb Mon Sep 17 00:00:00 2001 From: Ross Lawley Date: Thu, 16 Jun 2011 15:00:10 +0100 Subject: [PATCH] Fixes for django Q query rendering bug Ensures that the QNodes haven't already been processed Fixes #185 --- mongoengine/queryset.py | 3 ++- tests/django_tests.py | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index 76d4d1cd..92229a1c 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -251,7 +251,8 @@ class QCombination(QNode): def accept(self, visitor): for i in range(len(self.children)): - self.children[i] = self.children[i].accept(visitor) + if isinstance(self.children[i], QNode): + self.children[i] = self.children[i].accept(visitor) return visitor.visit_combination(self) diff --git a/tests/django_tests.py b/tests/django_tests.py index ee8084ce..930cc113 100644 --- a/tests/django_tests.py +++ b/tests/django_tests.py @@ -53,4 +53,7 @@ class QuerySetTest(unittest.TestCase): t = Template("{% for o in ol %}{{ o.name }}-{{ o.age }}:{% endfor %}") d = {"ol": self.Person.objects.filter(Q(age=10) | Q(name="C"))} - self.assertEqual(t.render(Context(d)), u'D-10:C-30:') \ No newline at end of file + self.assertEqual(t.render(Context(d)), 'D-10:C-30:') + + # Check double rendering doesn't throw an error + self.assertEqual(t.render(Context(d)), 'D-10:C-30:') \ No newline at end of file