我有以下(大大简化)表结构:
Order:
order_number = CharField
order_invoice_number = CharField
order_invoice_value = CharField
发票号码可以在多个订单上相同(订单O1的发票号为I1,订单O2的发票号为I1等)。具有相同发票编号的所有订单具有相同的发票金额。
例如:
Order no. Invoice no. Value
O1 I1 200
O2 I1 200
O3 I1 200
04 I2 50
05 I3 100
我要做的是对所有发票金额进行总结,但不要多次添加具有相同编号的发票。上述项目的总和为:200 + 50 + 100。
我尝试使用
这样做s = orders.values('order_invoice_id').annotate(total=Sum('order_invoice_value')).order_by()
和
s = orders.values('order_invoice_id').order_by().annotate(total=Sum('order_invoice_value'))
但我没有得到理想的结果。我在这里尝试了类似问题的几个不同的解决方案,但我无法得到理想的结果。
我无法弄清楚我做错了什么以及我实际应该做些什么来获得一次使用每个发票金额的金额。
编辑:
我刚才意识到在O5我写了I2而不是I3。它现在写得很好。
上述数据的预期结果是每个发票金额的总和,仅使用一次。 Sum = I1 + I2 + I3 = 200 + 50 + 100 = 350
答案 0 :(得分:1)
我会说你的模型结构是错误的。您应该有一个Order表,包含订单号和值,以及一个单独的发票相关表,其中包含从Invoice到Order的外键。那么你的查询就很简单了。