2011-10-10 68 views
1

我有一個Django應用程序,用戶在其中發佈消息,其他用戶可以向上或向下投票答覆,與SO非常相似。我有一個問題,試圖從模板中獲得「大拇指」和「大拇指朝下」的數量,我希望有人能幫助我。 PostVote與Post類是多對一的關係。這裏是我的模型看起來像:Django計算多對一關係的具體項目

class Post(models.Model): 
    account = models.ForeignKey(Account) 
    message = models.CharField(max_length=1024) 
    timestamp = models.DateTimeField('post timestamp') 

class PostVote(models.Model): 
    post = models.ForeignKey(Post) 
    account = models.ForeignKey(Account) 
    vote = models.CharField(max_length=16, choices=VOTE_CHOICES) 
    timestamp = models.DateTimeField('vote timestamp') 

這是我應得我的帖子:

posts = Post.objects.all().order_by('-timestamp')[:10] 

我的模板看起來大致是:

{% for post in posts %} 
<div>Thumbs up count: {{ WHAT_HERE }}</div> 
<div>Thumbs down count: {{ WHAT_HERE }}</div> 
{% endfor %} 

我如何獲得在那裏計數?我確信它涉及'註釋',但我很難與這一個提出。任何幫助將不勝感激!

+0

不要在你的意見計數,在將它們作爲參數;或者傳遞查詢集,使用queryset.count(模板中沒有括號)。 – Marcin

+0

感謝Marcin的答覆,Matt的答案奏效。我將帖子列表傳遞給我的模板,因此傳遞數據不會奏效。我欣賞幫助。 – themanatuf

回答

0

你不應該在模板中做邏輯。添加一對夫婦計數方法您Post型號:

class Post(models.Model): 
    account = models.ForeignKey(Account) 
    message = models.CharField(max_length=1024) 
    timestamp = models.DateTimeField('post timestamp') 

    def upvote_count(self): 
     return self.postvote_set.filter(vote=VOTE_CHOICES[0][0]).count() 

    def downvote_count(self): 
     return self.postvote_set.filter(vote=VOTE_CHOICES[1][0]).count() 

然後在你的模板中使用它們:

{% for post in posts %} 
<div>Thumbs up count: {{ post.upvote_count }}</div> 
<div>Thumbs down count: {{ post.downvote_count }}</div> 
{% endfor %} 
+1

謝謝!咄!我不知道爲什麼我沒有考慮將該功能添加到模型中。非常感謝,這完全解決了我的問題。乾杯! – themanatuf