【问题标题】:Django - Querysets - Eficient way to get totalsDjango - 查询集 - 获取总数的有效方法
【发布时间】:2023-01-07 22:03:18
【问题描述】:

我必须获得不同类型概念的总数(Rem、NR、NROS 等) 在查询集中概念液我正在为每种类型做一个过滤器(见下面的代码),有没有办法让它更有效?预先感谢!

tmp_value = concepto_liq.filter(tipo='Rem', empleado=empleado).aggregate(Sum('importe'))
remuneracion = 0 if not tmp_value['importe__sum'] else int(round(tmp_value['importe__sum'], 2) * 100)
tmp_value = concepto_liq.filter(tipo='NR', empleado=empleado).aggregate(Sum('importe'))
no_remunerativo = 0 if not tmp_value['importe__sum'] else int(round(tmp_value['importe__sum'], 2) * 100)
tmp_value = concepto_liq.filter(tipo='NROS', empleado=empleado).aggregate(Sum('importe'))
no_remunerativo_os = 0 if not tmp_value['importe__sum'] else int(round(tmp_value['importe__sum'], 2) * 100)
tmp_value = concepto_liq.filter(tipo='ApJb', empleado=empleado).aggregate(Sum('importe'))
aporte_jb = 0 if not tmp_value['importe__sum'] else int(round(tmp_value['importe__sum'], 2) * 100)
tmp_value = concepto_liq.filter(tipo='ApOS', empleado=empleado).aggregate(Sum('importe'))
aporte_os = 0 if not tmp_value['importe__sum'] else int(round(tmp_value['importe__sum'], 2) * 100)

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    您可以在同一个查询中进行所有过滤:

    from django.db.models import Q
    
    results = concepto_liq.filter(empleado=empleado).aggregate(
        remuneracion=Sum('importe', filter=Q(tipo='Rem')),
        no_remunerativo=Sum('importe', filter=Q(tipo='NR')),
        no_remunerativo_os=Sum('importe', filter=Q(tipo='NROS')),
        aporte_jb=Sum('importe', filter=Q(tipo='ApJb')),
        aporte_os=Sum('importe', filter=Q(tipo='ApOS')),
    )
    results = {k: 0 if v is None else int(v * 100) for k, v in result.items()}

    这将计算同一查询中的所有项目,并且这适用于一个查询,而不是五个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-25
      • 2017-05-10
      • 1970-01-01
      • 2012-10-01
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      相关资源
      最近更新 更多