优化 Django 查询
Posted
技术标签:
【中文标题】优化 Django 查询【英文标题】:Optimizing Django queries 【发布时间】: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 花费的时间太长? 【参考方案1】:我认为这是 select_related 的情况?
https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related
【讨论】:
是的,我刚刚找到了。太棒了!以上是关于优化 Django 查询的主要内容,如果未能解决你的问题,请参考以下文章