2017-02-16 8 views
0

私は2つのテーブルがあります。Djangoのクエリの合計値

チケット表

id paid_with_tax 
1 5 
2 6 
3 7 

TicketAdjustment表

id ticket_id value_with_tax 
1 1   2 
2 1   1 
3 1   2 
4 1   3 
5 2   5 

私が使用したクエリ:

use = 0 

Ticket.objects.all().annotate(
    paid_amount=Sum(
     F('paid_with_tax') + 
     Coalesce(F('ticketadjustment__value_with_tax'), 0) * use 
    ) 
) 

クエリは以下を返しますチケットテーブルid = 1の値がTicketAdjustmentテーブルの値によって複製されるため、上記は正しくありません。

どのように私はTicketAdjustment表の値を合計し、次を返すために、クエリを取得することができます:

[ 
    {id: 1, paid_amount: 13}, 
    {id: 2, paid_amount: 11}, 
    {id: 3, paid_amount: 7}, 
] 

答えて

1

ここで発生した問題の解決策:

Ticket.objects.all().annotate(
    paid_amount=(F('paid_with_tax') + 
     Sum(Coalesce(F('ticketadjustment__value_with_tax'), 0)) 
    ) 
).values_list('id', 'paid_amount') 

values_listあなたにしたいフィールドを選択結果。

主なリクエストに大きな問題があります。

Sum(F('paid_with_tax') + Coalesce(F('ticketadjustment__value_with_tax'), 0) * use) 

このリグニンミルチップvalue_with_taxはゼロです。だからゼロを与える。 、あなたが各チケットのvalue_with_taxの合計をしたい

Sum(F('paid_with_tax')) 

私はそれにSumを移動する理由です:それは同様だ

Sum(Coalesce(F('ticketadjustment__value_with_tax'), 0)) 

以降はpaid_with_tax

NBの値を追加します。Iあなたの変数useを削除してください。理由はわかりません。