summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Voronov <despawn@gmail.com>2013-12-22 00:03:17 +0200
committerAnssi Kääriäinen <akaariai@gmail.com>2013-12-22 00:03:17 +0200
commit7f2485b4d180956aa556a88ed1d9754eeeeea054 (patch)
treef8d1443793a537937d0b31f2da70f0b389937857
parentb80a8357d683b9a04a14ff46b1a132ad480e8a61 (diff)
Fixed #21643 -- repeated execution of qs with F() + timedelta
Thanks Tim Graham for review.
-rw-r--r--django/db/models/sql/expressions.py1
-rw-r--r--tests/expressions_regress/tests.py7
2 files changed, 8 insertions, 0 deletions
diff --git a/django/db/models/sql/expressions.py b/django/db/models/sql/expressions.py
index bd661b5adf..9f29e2ace5 100644
--- a/django/db/models/sql/expressions.py
+++ b/django/db/models/sql/expressions.py
@@ -111,6 +111,7 @@ class SQLEvaluator(object):
def evaluate_date_modifier_node(self, node, qn, connection):
timedelta = node.children.pop()
sql, params = self.evaluate_node(node, qn, connection)
+ node.children.append(timedelta)
if (timedelta.days == timedelta.seconds == timedelta.microseconds == 0):
return sql, params
diff --git a/tests/expressions_regress/tests.py b/tests/expressions_regress/tests.py
index e603c410ac..7533e4ee39 100644
--- a/tests/expressions_regress/tests.py
+++ b/tests/expressions_regress/tests.py
@@ -274,6 +274,13 @@ class FTimeDeltaTests(TestCase):
self.days_long.append(e4.completed - e4.assigned)
self.expnames = [e.name for e in Experiment.objects.all()]
+ def test_multiple_query_compilation(self):
+ # Ticket #21643
+ queryset = Experiment.objects.filter(end__lt=F('start') + datetime.timedelta(hours=1))
+ q1 = str(queryset.query)
+ q2 = str(queryset.query)
+ self.assertEqual(q1, q2)
+
def test_delta_add(self):
for i in range(len(self.deltas)):
delta = self.deltas[i]