【发布时间】:2012-06-10 22:47:41
【问题描述】:
我正在制作一个非常基本的投票应用程序。它与 Django 教程中的类似,但我选择将计票方面分解为它自己的模型(教程只是在每个 answer 旁边添加了一个 vote 计数字段)。这是我的模型:
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 个实际 PollAnswers 之一的投票)。如果我查看 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>
【问题讨论】: