Django选择不同的总和

时间:2010-03-20 02:02:59

标签: django django-queryset

我有以下(大大简化)表结构:

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

1 个答案:

答案 0 :(得分:1)

我会说你的模型结构是错误的。您应该有一个Order表,包含订单号和值,以及一个单独的发票相关表,其中包含从Invoice到Order的外键。那么你的查询就很简单了。