我正在制作一个非常基本的投票应用程序。它与 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'))
当我输出这个查询的结果时,每次投票我只得到一行(例如,我看到大约 40 个我的投票的“答案”,每个代表对 5 个实际PollAnswer
s 之一的投票)。如果我查看 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>