2013-04-10 57 views
0

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

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

或者至少使它显示每个月和多少次部门在那个月被提及。

+0

你要问什么SQL语句应该使用,或者如何显示来自模板中请求上下文的信息? – psychok7 2013-04-10 14:59:15

+0

我想在我的模板中显示来自请求的信息。谢谢你的答案。 – InKline 2013-04-10 16:28:00

回答

1

你需要的东西,如:

{% for each_model in raport %} 
    {{each_model.department}} 
    {{each_model.date}} 
{% endfor %} 
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> 
+0

使用您的解决方案后,结果如下所示:http://i47.tinypic.com/bjd3qf.jpg我如何获得水平的月份,然后显示那些月份的部门发生次数,就像在我的第一篇文章中附加的图像中一样?问候 – InKline 2013-04-11 10:52:27

+0

@ user2266285请参阅我的编辑 – Ngenator 2013-04-11 11:26:48

相关问题