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