Django聚合,计数总和
Posted
技术标签:
【中文标题】Django聚合,计数总和【英文标题】:Django Aggregation, sum of counts 【发布时间】:2014-07-27 10:22:42 【问题描述】:我有 3 个模型:论坛、主题、帖子,我正在创建一个视图来显示论坛列表。但我也想显示每个论坛的线程数和帖子数。
然后我必须:
统计每个主题的帖子数 汇总每个论坛每个主题的帖子数我在这里找到了类似的东西:Django: Sum the count of a sub sub foreign object 但答案对我不起作用。
from django.shortcuts import render
from django.template import Context
from django.contrib.auth.decorators import login_required
from django.db.models import Count
from chinwag.models import Forum, Thread, Post
@login_required
def forums(request):
forums = Forum.objects.annotate(num_posts=Count('threads__posts')).all(
).select_related('threads__last_post')
return render(request, 'chinwag/forums.html', Context(
'forums': forums,
))
是否可以在 1 个 SQL 查询中完成?怎么样?
【问题讨论】:
【参考方案1】:如果我理解正确,你可以使用
Forum.objects.annotate(num_threads=Count('threads__id'),
num_posts=Count('threads__posts__id'))
这会在一个数据库命中产生两个注释。
第一个计算论坛上的所有线程,第二个计算论坛所有线程上的所有帖子(假设 thread
为 ForeignKey 和 Form
,post
ForeignKey
和 threads
.
'threads__posts__id'
中的确切命名取决于外键的名称,但如果建议不正确,Django 会报错。
附:你可以删除.all()
,它什么也没做。
【讨论】:
以上是关于Django聚合,计数总和的主要内容,如果未能解决你的问题,请参考以下文章
在 Python Pandas 中聚合组并从某个计数中吐出百分比
在 Python Pandas 中聚合组并从某个计数中吐出百分比