代码之家  ›  专栏  ›  技术社区  ›  Niladry Kar

如何排除django聚合中的值?

  •  1
  • Niladry Kar  · 技术社区  · 7 年前

    groups = group1.objects.filter(User=request.user, Company=company_details.pk, ledgergroups__Creation_Date__gte=selectdatefield_details.Start_Date, ledgergroups__Creation_Date__lte=selectdatefield_details.End_Date).exclude(group_Name__icontains='Capital A/c')
    groups_cb = groups.annotate(
                closing = Coalesce(Sum('ledgergroups__Closing_balance'), 0),
                opening = Coalesce(Sum('ledgergroups__Balance_opening'), 0),
            )
    

    我想通过交换注释的负值在“关闭”和“打开”中执行聚合。。。

    例如:

    如果关闭值为25005000,-8000

    和-8000将添加到“期初”的合计值中。

    有人知道如何解决这个问题吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   schillingt    7 年前

    你可以使用 Case and When 在一段时间内 Sum

    Sum(
        Case(
            When(
                another_model__field_value__lt=0,
                then=F('another_model__field_value'),
            ),
            default=F('another_model__other_field_value'),
            output_field=IntegerField(),
        )
    )