Skip to content

Commit

Permalink
Fixed #15904 - render_comment_form executes unnecessary query for object
Browse files Browse the repository at this point in the history
Thanks to stefanw for report and patch!

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16103 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
spookylukey committed Apr 26, 2011
1 parent d8bfd39 commit 1b6670d
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
17 changes: 14 additions & 3 deletions django/contrib/comments/templatetags/comments.py
Expand Up @@ -122,12 +122,23 @@ class CommentFormNode(BaseCommentNode):
"""Insert a form for the comment model into the context.""" """Insert a form for the comment model into the context."""


def get_form(self, context): def get_form(self, context):
ctype, object_pk = self.get_target_ctype_pk(context) obj = self.get_object(context)
if object_pk: if obj:
return comments.get_form()(ctype.get_object_for_this_type(pk=object_pk)) return comments.get_form()(obj)
else: else:
return None 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): def render(self, context):
context[self.as_varname] = self.get_form(context) context[self.as_varname] = self.get_form(context)
return '' return ''
Expand Down
Expand Up @@ -40,6 +40,11 @@ def testRenderCommentFormFromLiteral(self):
def testRenderCommentFormFromObject(self): def testRenderCommentFormFromObject(self):
self.testRenderCommentForm("{% render_comment_form for a %}") self.testRenderCommentForm("{% render_comment_form for a %}")


def testRenderCommentFormFromObjectWithQueryCount(self):
def test():
self.testRenderCommentFormFromObject()
self.assertNumQueries(1, test)

def testGetCommentCount(self, tag=None): def testGetCommentCount(self, tag=None):
self.createSomeComments() self.createSomeComments()
t = "{% load comments %}" + (tag or "{% get_comment_count for comment_tests.article a.id as cc %}") + "{{ cc }}" t = "{% load comments %}" + (tag or "{% get_comment_count for comment_tests.article a.id as cc %}") + "{{ cc }}"
Expand Down

0 comments on commit 1b6670d

Please sign in to comment.