繁体   English   中英

在Django中有效地获取相关模型的数量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM