如果2个模型共享相同字段的值,如何在Django模板中聚合integerfield?

时间:2019-06-09 08:54:36

标签: django django-models django-templates django-queryset

我有这个模特:

class LoggedUserDepartement(models.Model):
    department  = models.CharField(max_length=250, default='Care')
    date        = models.DateField()
    login_count = models.PositiveIntegerField(default=0)

我的views.py中有此查询集:

department_count = LoggedUserDepartement.objects.all()  

在我的模板中,我已经这样做了:

{% for item in department_count %}
   {{item.date }} {{item.login_count}} {{item.department}}<br>
   {% endfor %}

这是我得到的结果:

June 8, 2019 3 css
June 8, 2019 1 carefr
June 9, 2019 2 css
June 9, 2019 1 carefr

所以我在这里不能做的是,当我在Department字段上具有相同的值时,如何合并两个项目并汇总登录计数值,而不显示日期字段的值? 而不是我现在要得到的结果,我想得到这个波纹管:

{% for item in department_count %}
   {{item.login_count}} {{item.department}}<br>
   {% endfor %}
5 css
3 carefr

PS:此查询集中的日期字段不是必需的,但以后我将在其他查询集中使用它,因此我无法删除它。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我们可以进行如下汇总:

from django.db.models import Sum

LoggedUserDepartment.objects.values('department').annotate(
    total_login=Sum('login_count')
).order_by('department')

然后将其渲染为:

{% for item in department_count %}
    {{ item.total_login }} {{ item.department }}<br>
{% endfor %}

话虽这么说,但我不确定上述建模是否是解决此问题的最佳方法。这里基本上有两个问题:

  1. 很多列都有重复的值,看来您应该建立模型Department,并用ForeignKey链接到它;和
  2. 您的模型还存储汇总数据(井login_count),而不是汇总单个记录。

这将使维护数据库变得困难。