Django,如何基于值获取两个字段值的总和

时间:2018-11-14 17:41:16

标签: python django

models.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'))

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

1 个答案:

答案 0 :(得分:0)

我认为这应该对您有用。您可能需要根据自己的需要进行更改,但是它显示了在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(),
        )
    )
)