在Django queryset中计算出现的频率占总数的百分比

时间:2016-04-17 02:34:07

标签: django performance django-models

在Django应用程序中,我有一个名为Comment的数据模型的查询集。这包含用户留下的文本注释。

想象一下' n'用户评论说。什么是计算哪个用户留下的评论百分比的最快方法?

现在我认为它会成为:

Comment.objects.filter(commenter=<username>).count()/Comment.objects.count()

你有什么建议?我的目标是标记过多评论的人,以便筛选他们的帐户以查找可能的垃圾邮件。我大量运行这个查询,因此专注于性能。

1 个答案:

答案 0 :(得分:1)

您应避免为数据库中的每个用户进行一次查询。相反,您可以使用以下内容查询每个用户(甚至是顶级n评论者)的评论数量:

from django.db.models import Count

total_comments = Comment.objects.count()
# Fetch top 10 commenters, annotated with number of comments, ordered by highest first
User.objects.annotate(num_comments=Count('comment')).order_by('-num_comments')[:10]
for user in users:
    percentage = user.num_comments / total_comments

此示例假设您拥有User模型,Comment具有外键。

如果您要比较评论的相对数量,则总评论的百分比实际上并不重要。