我有一个关于计算对象,过滤结果并最终将它们放入我的模板的问题。
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))
问题是,如何在表格中显示结果:
或者至少让它每月展示一次以及当月提到部门的次数。
答案 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>