2011-10-10 67 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