2012-04-03 18 views
1

例として、Postというモデルがあります(ユーザの認証モデルに外部キーとしてAuthorを使用しています)。それぞれのユーザーのリストと投稿の数を返す方法は?リスト内の全員にとって最新の投稿である可能性があります。Django:ユーザのリスト内のユーザ1人あたりのカウント数

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}) 
+1

[aggregation](https://docs.djangoproject.com/en/dev/topics/db/aggregation/#generating-aggregates-for-each-item-in-a-queryset)を参照してください。 –

答えて

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

注:PostがUserProfileとの関係を持っている場合に動作します – jpic

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

ごとのオブジェクトサマリーは、注釈()句を使用して生成することができます。注釈()句が指定されている場合、クエリセット内の各オブジェクトは、未がaggregate, Generating aggregates over a QuerySetと混同し

指定された値でアノテートされます。

私たちが必要なものを計算するための方法ですこのQuerySetに属するオブジェクトに対するサマリー値。クエリセットのすべての項目を集約 :クエリセット

  • 集合体()の項目当たり総計:これは、クエリセット

    • 注釈()に集約()句を付加することによって行われます
    +0

    それはうまくいっていますが、すべてのユーザーが投稿のすべてのカウントを取得します。 : – Hamza

    +1

    私はあなたが注釈の代わりに集計を使用したと思います。サンプルコードで答えを更新しました。 – jpic

    関連する問題