2012-04-03 46 views
1

如何從另一個模型返回用戶的發佈項目,例如我有一個名爲Post的模型(作者爲用戶Auth模型的外鍵)。如何返回用戶列表和每個帖子的數量?可能是列表中每個人的最新帖子。的annotate and CountDjango:用戶列表中每個用戶的帖子數

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

請參閱文檔中的[聚合](https://docs.djangoproject.com/en/dev/topics/db/aggregation/#generating-aggregates-for-each-item-in-a-queryset)。 – 2012-04-03 12:37:51

回答

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

注意:如果Post與UserProfile有關係,那麼它就可以工作 – jpic 2012-04-03 12:53:24

2

實例:

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 2012-04-03 14:55:05

    +1

    我認爲你使用了聚合而不是註釋。用更多的示例代碼更新了答案。你可以發佈你的模型,也許有什麼特別的呢? – jpic 2012-04-03 15:13:39

    相關問題