Django:用户列表中的每个用户的发布计数

时间:2012-04-03 12:27:32

标签: django

如何从其他模型返回用户的已发布项目,例如我有一个名为Post的模型(使用Author作为User的Auth模型的外键)。如何返回每个用户列表和帖子数量?可能是列表中每个人的最新帖子。

def users_list(request):
    users = UserProfile.objects.all()
    for userposts in users:
        posts_count = Post.objects.filter(author=users.user).count()
    return render_to_response('users.html',{'users':users,'posts_count':posts_count})

2 个答案:

答案 0 :(得分:2)

annotate and Count的使用示例:

for user in User.objects.annotate(post_count=Count('post')):
    print user.post_count

Generating aggregates for each item in a QuerySet

  

可以使用annotate()子句生成每个对象的摘要。当指定annotate()子句时,QuerySet中的每个对象都将使用指定的值进行注释

aggregate, Generating aggregates over a QuerySet混淆:

  

我们需要的是一种计算属于此QuerySet的对象的汇总值的方法。这是通过将一个aggregate()子句附加到QuerySet

来完成的
  • annotate():汇总每个项目的查询集
  • aggregate():聚合查询集的所有项目

答案 1 :(得分:1)

UserProfile.objects.all().annotate(num_posts=Count('post'))