summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Plant <L.Plant.98@cantab.net>2011-04-26 11:28:50 +0000
committerLuke Plant <L.Plant.98@cantab.net>2011-04-26 11:28:50 +0000
commit1b6670dd590ef8f235166ce966d28ac49f322c54 (patch)
tree27564ef2450f44be362b4a90107d77b42d94fd17
parentd8bfd3955d4fedbe45a7dcb7c2a533bf0e3a9ef7 (diff)
Fixed #15904 - render_comment_form executes unnecessary query for object
Thanks to stefanw for report and patch! git-svn-id: http://code.djangoproject.com/svn/django/trunk@16103 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/comments/templatetags/comments.py17
-rw-r--r--tests/regressiontests/comment_tests/tests/templatetag_tests.py5
2 files changed, 19 insertions, 3 deletions
diff --git a/django/contrib/comments/templatetags/comments.py b/django/contrib/comments/templatetags/comments.py
index 42691c63e4..8bc61cd445 100644
--- a/django/contrib/comments/templatetags/comments.py
+++ b/django/contrib/comments/templatetags/comments.py
@@ -122,12 +122,23 @@ class CommentFormNode(BaseCommentNode):
"""Insert a form for the comment model into the context."""
def get_form(self, context):
- ctype, object_pk = self.get_target_ctype_pk(context)
- if object_pk:
- return comments.get_form()(ctype.get_object_for_this_type(pk=object_pk))
+ obj = self.get_object(context)
+ if obj:
+ return comments.get_form()(obj)
else:
return None
+ def get_object(self, context):
+ if self.object_expr:
+ try:
+ return self.object_expr.resolve(context)
+ except template.VariableDoesNotExist:
+ return None
+ else:
+ object_pk = self.object_pk_expr.resolve(context,
+ ignore_failures=True)
+ return self.ctype.get_object_for_this_type(pk=object_pk)
+
def render(self, context):
context[self.as_varname] = self.get_form(context)
return ''
diff --git a/tests/regressiontests/comment_tests/tests/templatetag_tests.py b/tests/regressiontests/comment_tests/tests/templatetag_tests.py
index 4c90d9d208..0ead6c2257 100644
--- a/tests/regressiontests/comment_tests/tests/templatetag_tests.py
+++ b/tests/regressiontests/comment_tests/tests/templatetag_tests.py
@@ -40,6 +40,11 @@ class CommentTemplateTagTests(CommentTestCase):
def testRenderCommentFormFromObject(self):
self.testRenderCommentForm("{% render_comment_form for a %}")
+ def testRenderCommentFormFromObjectWithQueryCount(self):
+ def test():
+ self.testRenderCommentFormFromObject()
+ self.assertNumQueries(1, test)
+
def testGetCommentCount(self, tag=None):
self.createSomeComments()
t = "{% load comments %}" + (tag or "{% get_comment_count for comment_tests.article a.id as cc %}") + "{{ cc }}"