gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:45:26 25 4
gpt4 key购买 nike

我有这样的情况(实际代码绑定(bind)在模板中,为简洁起见省略)。

threads = Thread.objects.all()
for thread in threads:
print(thread.comments.count())
print(thread.upvotes.count())

我已经设法使用 Django 出色的 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)

参见 annotation documentation获取更多信息。

关于python - 在 Django 中有效地获取相关模型的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23210254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com