Django - 通过 for 循环查询

时间:2021-04-16 17:44:53

标签: python django

我必须获取每个用户的总发帖数

@staff_member_required
def counter(request):
    posts = Post.objects.all().count()
    users = User.objects.all()
    for user in users.iterator():
        written_posts = Post.objects.filter(author=user).count()

    context = {'users': users, 'written_posts': written_posts, 'posts': posts, 'num': num}
    return render(request, 'account/counter.html', context)

但它为所有用户返回相同用户的帖子数。谁能给点建议?

1 个答案:

答案 0 :(得分:4)

您在循环中返回,因此它只会“找到”第一个用户。

无论如何,不​​要手动循环,而是使用 annotate 函数:

0x123

现在可以了

from django.db.models import Count

@staff_member_required
def counter(request):
    users = User.objects.all().annotate(post_count=Count('post_set'))
    context = {'users': users}
    return render(request, 'account/counter.html', context)

在模板中。