Django,如何根据值获取两个字段值的总和

模型.py


class Iso(models.Model):

    service_type = models.CharField(max_length=100, blank=True, null=True)

    field_1 = models.IntegerField(blank=True, null=True)

    field_1_size = models.IntegerField(blank=True, null=True)

    field_2 = models.IntegerField(blank=True, null=True)

    field_2_size = models.IntegerField(blank=True, null=True)

在我的 views.py 中,我有两个查询集,如下所示,现在如果我想将查询组合在一起,并且如果用户输入的 field_1 值和 field_2 值相同,则应该对其进行汇总。


qs1 = Model.objects.values('service_type', 'field_1')\

            .annotate(field_total=Sum('field_1_size'))

qs2 = Model.objects.values('service_type', 'field_2')\

            .annotate(field_total=Sum('field_2_size'))

我试过,如果 field_1 和 field_2 相同, qs_tot = qs1.union(qs2) 它结合了查询集但不给出总和值。任何帮助将不胜感激。谢谢你。


白衣非少年
浏览 256回答 1
1回答

慕慕森

我认为这应该对你有用。您可能需要更改它以满足您的需要,但它显示了Case在Sum注释中使用的概念。Model.objects.annotate(    same_total=Sum(        Case(            When(                field_1=F('field_2'),                then=F('field_1_size')+F('field_2_size'),            ), output_field=IntegerField(),        )    ))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python