标签:python database sql django aggregate
我有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查询中执行此操作?怎么样?
解决方法:
如果我理解正确,你可以使用
Forum.objects.annotate(num_threads=Count('threads__id'),
num_posts=Count('threads__posts__id'))
这会在一个数据库中生成两个注释.
第一个计算论坛上的所有主题,第二个计算论坛所有主题上的所有帖子(假设一个主题是一个带有Form的ForeignKey,另一个是一个带有线程的ForeignKey.
‘threads__posts__id’中的确切命名取决于外键的名称,但如果Django不正确,则会在建议时发出错误.
附:你可以删除.all(),它没有做任何事情.
标签:python,database,sql,django,aggregate 来源: https://codeday.me/bug/20190528/1173729.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。