【发布时间】:2011-10-08 01:18:24
【问题描述】:
我有一个页面,用户可以在其中查看特定产品的 cmets 列表。
在视图中,我得到了列表:
comments = product.comments.all().order_by('-timestamp')
以及模板中的这一段:
1 {% if comments %}
2 {% for comment in comments %}
3 <div class="comment">
4 <a href="/user/{{ product.author }}/">{{ comment.author }}</a>
5 <br>{{ comment.text }}
6 </div>
7 {% endfor %}
8 {% endif %}
当我转到产品页面时使用 django 调试工具栏,我可以看到 Django 执行了许多查询,列表中有许多 cmets。例如,在一个包含 10 个 cmets 的 cmets 列表的产品页面中,Django 执行大约 15 个查询。如果我提交新评论,查询数会增加到 16 个。
如果我尝试删除 {{ comment.author }}(第 4 行),如果我提交新的 cmets,查询会减少到固定数量。如何优化?
注意:comment.author 是 django.contrib.auth.models.User 的外键
【问题讨论】:
-
我不确定您是否需要担心这方面的优化,除非您期望每个产品有 100 或 1000 的 cmets。当你做这个查询时,你是否觉得获取那 10 个 cmets 花费的时间太长?
标签: django django-templates django-queryset