Django查看/模板如何知道模型的最大值

时间:2014-02-04 04:30:15

标签: python django django-models django-templates django-views

我正在研究包含两个模型的https://docs.djangoproject.com教程项目。

民意调查:

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    def was_published_recently(self):
        now = timezone.now()
        return now - datetime.timedelta(days=1) <= self.pub_date < now
    was_published_recently.admin_order_field = 'pub_date'
    was_published_recently.boolean = True
    was_published_recently.short_description = 'Published recently?'
    def __unicode__(self):
        return self.question

和选择:

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
    def __unicode__(self):
        return self.choice_text

有一个详细信息视图,显示投票问题,以及该问题的选项,并允许用户投票。并且结果视图再次显示问题,以及每个选项的当前投票数。

我已经正确显示了所有内容,但我正在尝试添加教程中未涵盖的功能,而且我不确定如何去做。我想这样做,以便在结果页面上选票最多的选项获得某种特殊格式,以表示它是当前的领导者。

现在在模板中我只有一个for循环,它输出每个选项,它的值以它们存储的顺序排列。

{% extends "polls/base.html" %}

{% block content %}
<h1>{{ poll.question }}</h1>

<ul>
{% for choice in poll.choice_set.all %}
    <li>{{ choice.choice_text }} -- {{ choice.votes }} vote{{ choice.votes|pluralize }}</li>
{% endfor %}
</ul>

<a href="{% url 'polls:detail' poll.id %}">Vote again?</a>
{% endblock %}

当我在for循环中时,我有点想弄清楚如何知道我是否选择得票最多,这样我就可以通过某种条件来改变格式。

我只是需要在正确的方向上轻推一下。在模板本身中是否有某种方式我可以知道哪个选项的票数最多?或者我是否需要在视图中找出并将其传递给模板?如果两者都可能,那么一个或另一个被认为是首选?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你可以写custom assignment template tag,然后在if ... else中使用它。

{% get_max_votes poll.choice_set.all as leader %}
{% for choice in poll.choice_set.all %}
    {% ifequal choice leader %}
    {% endif %}
{% endfor %}