1

私はDjangoアプリを持っており、ユーザーはメッセージを投稿し、他のユーザーはSOと非常によく似た回答を賛成または反対に投票できます。テンプレート内から「イマイチ」と「イマイチ」のカウントを取得しようとすると問題が発生します。誰かが私を助けてくれることを願っています。PostVoteは、Postクラスとの多対1の関係です。私のモデルは次のようになります。

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 %}

どうすればそこでカウントを取得できますか?どういうわけか「注釈」が含まれていると思いますが、これを思いつくのに苦労しています。どんな助けでも大歓迎です!

4

1 に答える 1

2

テンプレートで実際にロジックを実行するべきではありません。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 %}
于 2011-10-10T14:45:07.043 に答える