mysql - 在 django 中用 group by 列的总和

标签 mysql django django-rest-framework

我需要一些帮助来处理我尝试使用 django orm 模型运行的这个 sql 查询。

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

这是我做的

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

这是我在 json 中得到的结果:

[
    {
        "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']

我在这里做错了什么?

最佳答案

尝试一下,为注释列添加名称:

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

关于mysql - 在 django 中用 group by 列的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46037395/

相关文章:

python - 如何在 django 登录页面中添加 otp 身份验证

django - 如何在 Django 模板中获得 'switch-case' 语句功能?

python - django-rest-framework 如何使模型序列化程序字段成为必需的

python - 为什么从 django rest 框架返回的 JSON 在响应中有正斜杠?

php - 多次mysql调用评论部分

php - 使用存储在 mysql 数据库中的 if 语句

mysql - 如何在 Go 中为 MySQL 构建 RESTful API?

mysql - 如何查询哪个数据库有名为aaa的表?

Django Rest Framework - 序列化器验证不起作用

django - Django Rest Framework 中 ViewSet 结果的聚合总数