私は非常に基本的な投票アプリを作っています。これはDjangoチュートリアルのものと似ていますが、開票の側面を独自のモデルに分割することを選択しました(チュートリアルでは、vote
それぞれの横に開票フィールドを追加するだけanswer
です)。これが私のモデルです:
class PollQuestion(models.Model):
question = models.CharField(max_length=75)
class PollAnswer(models.Model):
poll = models.ForeignKey('PollQuestion')
answer = models.CharField(max_length=75)
class PollVote(models.Model):
poll = models.ForeignKey('PollQuestion')
answer = models.ForeignKey('PollAnswer')
date_voted = models.DateTimeField(auto_now_add=True)
user_ip = models.CharField(max_length=75)
特定の投票のすべての投票数を表示しようとしています。これが私のビューコードです:
from django.db.models import Count
poll_votes = PollVote.objects.select_related('PollAnswer').filter(poll=poll_id).annotate(num_votes=Count('answer__id'))
このクエリの結果を出力すると、投票ごとに1つの行が表示されます(たとえば、投票に対して約40の「回答」が表示され、それぞれが5つの実際PollAnswer
の投票の1つに対する投票を表します)。Djangoが行うクエリを見ると、投票のすべての投票に対して次のように実行されます。
SELECT `poll_answers`.`id`, `poll_answers`.`poll_id`, `poll_answers`.`answer`
FROM `poll_answers`
WHERE `poll_answers`.`id` = 101
誰かがここで私を正しい方向に突くことができますか?これは簡単なはずだと思います。
編集:完全を期すために、これが私のテンプレートコードです。
<ul>
{% for vote in votes %}
{{ vote.answer }} ({{ votes.num_votes }})<br />
{% endfor %}
</ul>