【问题标题】:Django, how to get sum of two field values based on valuesDjango,如何根据值获取两个字段值的总和
【发布时间】:2019-04-17 18:12:48
【问题描述】:

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 相同,它结合查询集但不给出总和值。任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 不,它只是添加两个字段,而不考虑值列表,如果它的 field_1 值与 field_2 值相同,我想要两个字段的总和

标签: python django


【解决方案1】:

我认为这应该适合你。您可能需要对其进行更改以满足您的需要,但它显示了在 Sum 注释中使用 Case 的概念。

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

【讨论】:

  • 如果不相等,您能告诉我如何总结各个值吗?谢谢
  • 对不起,我不明白。
  • 我正在寻找所有字段实例的总和值,如果一个 field_size 值与另一个相同,则应添加,否则应根据其给出单个字段的总和大小。
  • 您应该能够使用不同的 When 子句添加额外的 Sum 注释来做到这一点。
  • 能告诉我如何写field1不等于field2
猜你喜欢
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多