【问题标题】:Group by annotated value in Django ORM在 Django ORM 中按注释值分组
【发布时间】:2020-02-20 12:38:56
【问题描述】:

我想按类别 (mora_dias_categoria) 获取元素的数量,该类别是模型字段的计算,但它没有正确分组。

这是我尝试过的:

metricasColombia = MetricasPrestamosColombia.objects \
            .annotate(mora_cantidad =Sum(F('total_habia_que_recibir')-F('total_recibido'))) \
            .annotate(mora_dias_categoria = Case(
                When(Q(mora_cantidad__gt=0) & Q(mora_dias__gt=0) & Q(mora_dias__lte=30),then=Value('mora_030')),
                When(Q(mora_cantidad__gt=0) & Q(mora_dias__gt=30) & Q(mora_dias__lte=60),then=Value('mora_3060')),
                When(Q(mora_cantidad__gt=0) & Q(mora_dias__gt=60) & Q(mora_dias__lte=90),then=Value('mora_6090')),
                When(Q(mora_cantidad__gt=0) & Q(mora_dias__gt=90),then=Value('mora_90')),
                default=Value('No mora'),
                output_field=CharField()
            )) \
            .values('semana','idPrestamo_id__idContactoInfo_id__ciudad__nombreCiudad','mora_dias_categoria') \
            .annotate(totalPrestamos=Count('idPrestamo_id'))

但仍然得到这个输出(应该聚合时有重复):

[{'semana': '1-2020', 'idPrestamo_id__idContactoInfo_id__ciudad__nombreCiudad':
 'Medellín', 'mora_dias_categoria': 'mora_030',
 'totalPrestamos': 1}, {'semana': '1-2020', 'idPrestamo_id__idContactoInfo_id__ciudad__nombreCiudad': 
'Medellín', 'mora_dias_categoria': 'mora_030', 'totalPrestamos': 1}...

非常感谢!

【问题讨论】:

    标签: python django django-orm


    【解决方案1】:

    您是否尝试只计算id 而不是idPrestamo_id?如果没有看到您的模型,我无法真正确定这是否是问题所在,但可以尝试一下。

    【讨论】:

      猜你喜欢
      • 2020-01-26
      • 2020-12-10
      • 2011-04-02
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 2018-03-10
      • 2018-06-21
      相关资源
      最近更新 更多