优化Django查询
问题描述:
我有一个页面,用户可以看到特定产品的评论列表。优化Django查询
在视图中我得到的名单有:
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执行许多查询的列表中有许多评论。例如,在包含10条评论的评论列表的产品页面中,Django执行大约15个查询。如果我提交新评论,则查询次数将增加到16.
如果我尝试删除{{ comment.author }}
(第4行),则查询数减少到固定数,如果我提交新评论。如何优化这个?
NB:comment.author
是一个ForeignKey到django.contrib.auth.models.User
答
我认为这是select_related的情况下?
https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related
+0
是的,我刚刚找到它。真棒! –
我不知道,你需要担心这种优化,除非你希望对每个产品评论100的或1000年。当你做这个查询时,你觉得得到这10条评论需要很长时间吗? – Luke