如果要基于发票进行聚合,则需要使用批注。聚合将处理模型中存在的所有发票。在sql语言中,它类似于下面没有group by。
select sum(column1 * column2) from table;
注释是一种分组方式。
select invoice, sum(column1 * column2) from table group by invoice;
下面的queryset将解决您的问题。
from your_app import models
from django.db.models import F, Sum, FloatField
m = models.InvoiceEntry.objects.values('invoice').annotate(sum=Sum(F('amount') * F('unit_price'), output_field=FloatField()))
<QuerySet [{'invoice': 1, 'sum': 48.0}, {'invoice': 2, 'sum': 8.0}]>
这将提供所有发票金额。如果您需要特定的发票,可以使用过滤器。
m = models.InvoiceEntry.objects.filter(invoice=1).values('invoice').annotate(sum=Sum(F('amount')
* F('unit_price'), output_field=FloatField()))
<QuerySet [{'invoice': 1, 'sum': 48.0}]>