如何在Django聚合中排除值?

时间:2018-12-11 12:21:53

标签: django django-views django-queryset

我已经做到了:

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),
        )

我想通过交换注释的负值来在“关闭”和“打开”中进行汇总...

我的意思是负值,它将通过“关闭”中的注释出现,该值应与“打开”的汇总值相加。...

例如:

如果close的值是2500,5000,-8000 总价值为7500(总价值)

和-8000将被添加到'opening'的合计值中。

有人知道如何解决吗?

1 个答案:

答案 0 :(得分:1)

您可以在Sum批注中使用Case and When

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(),
    )
)