模型.pyclass 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) 它结合了查询集但不给出总和值。任何帮助将不胜感激。谢谢你。
1 回答
慕慕森
TA贡献1856条经验 获得超17个赞
我认为这应该对你有用。您可能需要更改它以满足您的需要,但它显示了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(),
)
)
)
添加回答
举报
0/150
提交
取消