2010-03-20 64 views
2

我有以下(大大简化)表结构:Django的选择不同的总和

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我写的,而不是I3 I2。它现在写得很好。

上述数据的预期结果是每个发票值的总和,仅用于一次。 Sum = I1 + I2 + I3 = 200 + 50 + 100 = 350

+0

请添加您的预期或期望的结果。例如:I1总数= 600,I2总数= 150. – istruble 2010-03-21 01:48:13

+0

我编辑了我的问题并添加了期望的结果,并在我写的数据中发现了错误。 – yoshi 2010-03-21 12:47:43

回答

1

我会说你的模型结构是错误的。您应该有一张订单表,其中包含订单号和价值,以及发票单独的相关表格,外键为发票至订单。那么你的查询会很简单。