计算对象并在Django中显示结果

时间:2013-04-10 14:10:26

标签: django django-views counting tabular annotate

我有一个关于计算对象,过滤结果并最终将它们放入我的模板的问题。

Models.py中的

class Fms(models.Model):
    department = models.CharField(max_length=255, verbose_name='Department')
    date = models.DateField()
Views.py中的

def raport(request):
    raport = Fms.objects.filter(date__year='2013').extra(select={'month': "EXTRACT(month FROM date)"}).values('month', 'department').annotate(Count('department'))
    return render_to_response ('Fms/raport.html',
                               {'raport': raport},
                               context_instance=RequestContext(request))

问题是,如何在表格中显示结果:

Result

或者至少让它每月展示一次以及当月提到部门的次数。

2 个答案:

答案 0 :(得分:1)

你需要这样的东西:

{% for each_model in raport %}
    {{each_model.department}}
    {{each_model.date}}
{% endfor %}

答案 1 :(得分:1)

如果您未将关键字传递给annotate,则会使用附加了__count的字段名称。 https://docs.djangoproject.com/en/dev/topics/db/aggregation/#generating-aggregates-for-each-item-in-a-queryset要访问模板中的内容,您只需执行以下操作:

<table>
    <thead>
        <tr>
            <th>Month</th>
            <th>Count</th>
        </tr>
    </thead>
    <tbody>
        {% for item in raport %}
            <tr>
                <td>{{ item.month }}</td>
                <td>{{ item.department__count }}</td>
            </tr>
        {% endfor %}
    </tbody>
</table>

要水平显示......

<table>
    <thead>
        <tr>
            {% for item in raport %}
                <th>{{ item.month }}</th>
            {% endfor %}
        </tr>
    </thead>
    <tbody>
        <tr>
            {% for item in raport %}
                <td>{{ item.department__count }}</td>
            {% endfor %}
        </tr>
    </tbody>
</table>