2017-09-04 17 views
1

私はdjango ormモデルで実行しようとしているこのSQLクエリにいくつかの助けが必要です。djangoでgroup byの列の合計

SELECT SUM(CAPITAL) AS PRODUCT_CAPITAL, PRODUCT FROM CAPITAL_SHEET 
WHERE CLIENT_ID = 'X1234' 
GROUP BY PRODUCT 

私はこれは私がJSONで結果として取得していますものです。この

CapitalSheet.objects.filter(client_id="X1234").values("product").annotate(Sum("capital")) 

をした:

[ 
    { 
     "product": "product1" 
    }, 
    { 
     "product": "product2" 
    } 
] 

私は出力としてこれを期待していた。

[ 
    { 
     "product": "product1", 
     "capital": 1234.00 
    }, 
    { 
     "product": "product2", 
     "capital": 1234.00 
    } 
] 

ここに私の見解があります:

ここで
class CapitalListView(ListAPIView): 
    serializer_class = CapitalSheetSerializer 

    def get_queryset(self): 
     return CapitalSheet.objects.filter(client_id="X1234").values("product").annotate(Sum("capital")) 

私のモデルです:

class CapitalSheet(models.Model): 
    log_id = models.AutoField(db_column='LOG_ID', primary_key=True) 
    client_id = models.CharField(db_column='CLIENT_ID', max_length=25) 
    capital = models.DecimalField(db_column='CAPITAL', max_digits=10, decimal_places=2, blank=True, null=True) 
    payout_booked_profit = models.DecimalField(db_column='PAYOUT_BOOKED_PROFIT', max_digits=10, decimal_places=2, blank=True, null=True) 
    voucher_number = models.CharField(db_column='VOUCHER_NUMBER', max_length=45, blank=True, null=True) 
    ledger_date = models.DateField(db_column='LEDGER_DATE', blank=True, null=True) 
    amount = models.DecimalField(db_column='AMOUNT', max_digits=10, decimal_places=2, blank=True, null=True) 
    product = models.CharField(db_column='PRODUCT', max_length=45, blank=True, null=True) 
    transaction_type = models.CharField(db_column='TRANSACTION_TYPE', max_length=45, blank=True, null=True) 
    sebi_payin_flag = models.IntegerField(db_column='SEBI_PAYIN_FLAG', blank=True, null=True) 
    dividend_payout_flag = models.IntegerField(db_column='DIVIDEND_PAYOUT_FLAG', blank=True, null=True) 

マイシリアライザ:

class CapitalSheetSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = CapitalSheet 
     fields = ['capital','product'] 

私はここで間違って何をしているのですか?

+0

どのようにあなたが 'json'を取得したのですか?コードを表示してください –

+0

'CapitalSheetSerializer'のコードを追加してください –

+0

私は質問を更新しました。 – Zed

答えて

1

は注釈列の名前を追加し、それを試してみてください。

CapitalSheet.objects.filter(
    client_id="X1234" 
).values("product").annotate(capital=Sum("capital")) 
#       ^^^^^^^ 
+0

ありがとう、私は間違って何をしていたのか分かりませんでした。私はこの '.annotate(total = Sum(" capital "))'を試していましたが、フィールド名はあなたが試している列名と同じでなければなりません合計を計算する。 – Zed