[英]Get count of related model efficiently in Django
我遇到类似这样的情况(实际代码绑定在模板中,为简洁起见省略)。
threads = Thread.objects.all()
for thread in threads:
print(thread.comments.count())
print(thread.upvotes.count())
我已经设法使用Django的awfome prefetch_related
方法大大减少了查询总数。
threads = Thread.objects.prefetch_related('comments').prefetch_related('upvotes')
但是我想知道这种情况是否可以进一步优化。 据我所知, prefetch_related
检索与相关模型关联的所有数据。 看起来我只关心相关模型的数量,而不关心模型本身,似乎这个查询可以进一步优化,以便它不会检索一堆不必要的数据。 有没有办法在Django中执行此操作而不降低到原始SQL?
你是对的,如果要做的就是获取计数,从数据库中获取所有数据是浪费的。 我建议注释:
threads = (Thread.objects.annotate(Count('comments', distinct=True))
.annotate(Count('upvotes', distinct=True)))
for thread in threads:
print(thread.comments__count)
print(thread.upvotes__count)
有关更多信息,请参阅注释文档 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.