2011-10-10 7 views
1

私はDjangoアプリを持っています。ユーザーはメッセージを投稿し、他のユーザーはSOによく似た回答を上下に投票できます。テンプレート内から「親指を上に」と「親指を押し下ろして」カウントを取得しようとする際に問題が発生しています。誰かが私を助けてくれることを願っています。 PostVoteは、Postクラスと多対1の関係にあります。ここに私のモデルは次のようになります。Djangoは多対1の関係の特定の項目を数えます

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

はどのように取得することができます。

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

マイテンプレートはおおよそ次のようになります。

ここ
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') 

がある私は、私の記事を取得していますかそこに数えますか?私はそれが何とか「注釈」を含んでいると確信していますが、私は困難な時を過ごしています。どんな助けでも大歓迎です!

+0

をあなたの意見でカウントを行い、それらをパラメータとして渡します。 queryset.countを使用してください(テンプレートで角かっこは使用しないでください)。 – Marcin

+0

マーチンの返信をありがとう、マットの答えが働いた。私はテンプレートの投稿のリストを渡しているので、カウントを渡すことはできませんでした。私は助けに感謝します。 – 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