Django中如何统计每个Cliente对应的Pendente任务数并获取关联客户信息
解决方案
首先从Cliente模型发起查询会更符合你的需求逻辑,本质是为每个客户关联统计待办任务数,操作步骤如下:
1. 视图层修改查询语句
首先确保你已经引入Django的聚合函数:
from django.db.models import Count
将原有的查询替换为以下代码,完全匹配你给出的SQL逻辑,同时能获取客户的全部所需字段:
# 该语句会生成左连接查询,统计每个客户对应的待办任务数,无待办的客户任务数会显示为0 resultado = Cliente.objects.annotate( tarefas=Count('pendente') ).values('id', 'nome', 'localidade', 'tarefas')
如果你需要和你写的原始SQL完全一致(仅统计有至少1条待办任务的客户,同时包含未绑定客户的待办统计),可以使用以下语句:
resultado = Pendente.objects.values( 'cliente__id', 'cliente__nome', 'cliente__localidade' ).order_by('cliente').annotate( tarefas=Count('id') )
2. 模板层修改渲染代码
如果使用第一种从Cliente发起的查询,模板代码修改为:
<ul> {% for obj in resultado %} <li>{{ obj.id }} | {{ obj.nome }} | {{ obj.localidade }} : {{ obj.tarefas }}</li> {% endfor %} </ul>
如果使用第二种从Pendente发起的查询,模板代码对应修改为:
<ul> {% for obj in resultado %} <li>{{ obj.cliente__id }} | {{ obj.cliente__nome }} | {{ obj.cliente__localidade }} : {{ obj.tarefas }}</li> {% endfor %} </ul>
内容的提问来源于stack exchange,提问作者vitorfortes
相关产品推荐
相关产品推荐

