django多个注释总和

时间:2019-07-25 14:18:23

标签: python django

我有以下查询集,并且我想使用django注释进行多次和,但我有一些错误,请问您对此有何建议?,将不胜感激。我已经尝试过了,但是我想要的不一样

queryset = (
    BuildingCell.objects
    .filter(
        absent__publish='2019-07-22',
        absent__building_name='f2',
        absent__bagian='CUT',
        inputcutsew__publish='2019-07-22',
        inputcutsew__days='normal',
        inputcutsew__user=factory_user_cutting
    )
    .exclude(inputcutsew__cell_name__isnull=True)
    .exclude(inputcutsew__cell_name__exact='')
    .order_by('inputcutsew__cell')
    .values(
        'inputcutsew__cell',
        'inputcutsew__model',
        'absent__normal_mp',
        'absent__ot0_mp',
        'absent__ot1_mp',
        'absent__ot2_mp',
        'absent__ot3_mp'
    )
    .exclude(occult_cell='yes')
    .annotate(
        total_output_jam=Coalesce(Sum(Case(When(inputcutsew__dummy_days='normal', then='inputcutsew__output'))), 0),
        total_output_ot=Coalesce(Sum(Case(When(inputcutsew__dummy_days='overtime', then='inputcutsew__output'))), 0),
        total_time=Coalesce(Sum('inputcutsew__time'), 0),
        total_time_ot=Coalesce(Sum('inputcutsew__time_ot'), 0),
        total_time_ot1=Coalesce(Sum('inputcutsew__time_ot1'), 0),
        total_time_ot2=Coalesce(Sum('inputcutsew__time_ot2'), 0),
        total_time_ot3=Coalesce(Sum('inputcutsew__time_ot3'), 0)
    )
    .annotate(
        normal_wmh=Coalesce(F('absent__normal_mp'), 0) * Coalesce(F('total_time'), 0),
        normal_swmh=Coalesce(F('absent__normal_mp'), 0) * Coalesce(F('total_time'), 0),
        overtime_wmh=(
                (Coalesce(F('absent__ot0_mp'), 0) * Coalesce(F('total_time_ot'), 0))
                + (Coalesce(F('absent__ot1_mp'), 0) * Coalesce(F('total_time_ot1'), 0))
                + (Coalesce(F('absent__ot2_mp'), 0) * Coalesce(F('total_time_ot2'), 0))
                + (Coalesce(F('absent__ot3_mp'), 0) * Coalesce(F('total_time_ot3'), 0))
        ),
        overtime_swmh=(
            (1.5*Coalesce(F('absent__ot0_mp'), 0) * Coalesce(F('total_time_ot'), 0))
            + (2 * Coalesce(F('absent__ot1_mp'), 0) * Coalesce(F('total_time_ot1'), 0))
            + (2 * Coalesce(F('absent__ot2_mp'), 0) * Coalesce(F('total_time_ot2'), 0))
            + (2 * Coalesce(F('absent__ot3_mp'), 0) * Coalesce(F('total_time_ot3'), 0))
        )
    )
    .annotate(
        sum_total_output_jam=Sum(F('total_output_jam')),
        sum_total_output_ot=Sum(F('total_output_ot')),
        sum_normal_wmh=Sum(F('normal_wmh')),
        sum_normal_swmh=Sum(F('normal_swmh')),
        sum_overtime_wmh=Sum(F('overtime_wmh')),
        sum_overtime_swmh=Sum(F('overtime_swmh'))
    )
)
  

/ superuser / inputtime / 2/3 / f2 / CUT / 2019-07-22的FieldError无法   计算总和('total_output_jam'):'total_output_jam'是一个聚合

0 个答案:

没有答案