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
This commit is contained in:
parent
d8bfd3955d
commit
1b6670dd59
|
@ -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 ''
|
||||||
|
|
|
@ -40,6 +40,11 @@ class CommentTemplateTagTests(CommentTestCase):
|
||||||
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 }}"
|
||||||
|
|
Loading…
Reference in New Issue