擅长:python、mysql、java
<p>根据Jeff的评论,我认为您应该瞄准的只是Choice类中的一个属性,它计算与该对象相关联的投票数:</p>
<pre><code> class Choice(models.Model):
text = models.CharField(max_length=200)
def calculateVotes(self):
return Vote.objects.filter(choice = self).count()
votes = property(calculateVotes)
</code></pre>
<p>然后在模板中,可以执行以下操作:</p>
<pre><code> {% for choice in choices %}
{{choice.choice}} - {{choice.votes}} <br />
{% endfor %}
</code></pre>
<p>模板标签对于这个解决方案来说有点过分了,但它也不是一个糟糕的解决方案。Django中模板的目标是将您与模板中的代码隔离开来,反之亦然。</p>
<p>我会尝试上面的方法,看看or m生成了什么SQL,因为我不确定ORM是否会预先缓存属性并为属性创建一个子选择,或者它是否会迭代/按需运行查询来计算投票数。但是,如果它生成了糟糕的查询,您可以始终用自己收集的数据填充视图中的属性。</p>