tgy*_*tgy 4 python sql database django aggregate
我有3个模型:论坛,线程,帖子和我正在创建一个视图来显示论坛列表.但我也想显示每个论坛的主题数和帖子数.
然后我必须:
我在这里发现了类似的东西:Django:总结一个子子外来物的数量,但答案对我不起作用.
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,
}))
Run Code Online (Sandbox Code Playgroud)
是否可以在1个SQL查询中执行此操作?怎么样?
如果我理解正确,你可以使用
Forum.objects.annotate(num_threads=Count('threads__id'),
num_posts=Count('threads__posts__id'))
Run Code Online (Sandbox Code Playgroud)
这会在一个数据库中生成两个注释.
第一个计算论坛上的所有主题,第二个计算论坛所有主题的所有帖子(假设一个thread为ForeignKey Form,一个post是ForeignKeywith threads.
确切的命名'threads__posts__id'取决于外键的名称,但如果Django不正确,则会在建议时发出错误.
PS你可以删除.all(),它没有做任何事情.