Django中同模型同部门字段值时聚合登录计数的实现问题
解决方案:按Department聚合Login Count
要实现按department合并记录并聚合login_count的需求,你可以利用Django ORM的分组聚合功能,完全不需要修改模型(保留date字段丝毫不影响这个逻辑)。
步骤1:修改views.py中的查询集
把原来的department_count = LoggedUserDepartement.objects.all()替换成下面的代码,通过values()指定分组字段,再用annotate()完成求和聚合:
from django.db.models import Sum # 按department分组,计算每个部门的login_count总和 department_count = LoggedUserDepartement.objects.values('department').annotate(total_login=Sum('login_count')).order_by('department')
values('department'):告诉ORM以department字段为依据分组annotate(total_login=Sum('login_count')):对每个分组下的login_count求和,结果存到自定义的total_login字段中order_by('department'):可选配置,让结果按部门名称排序,方便阅读
步骤2:更新模板代码
模板里只需要渲染聚合后的部门名称和总登录数即可,不再需要处理date字段:
{% for item in department_count %} {{ item.total_login }} {{ item.department }}<br> {% endfor %}
效果验证
用你提供的示例数据,运行后会得到完全符合期望的结果:
5 css 3 carefr
这样既保留了date字段用于其他查询场景,又完美实现了按部门聚合登录数的需求~
内容的提问来源于stack exchange,提问作者Farhani Walid
相关产品推荐
相关产品推荐

