关于连接表的产品查询的Django总和

时间:2013-04-18 18:21:15

标签: django django-models

简而言之,我想知道如何在Django中表达以下SQL查询

SELECT SUM(product.cost_price * product.markup_percentage) from product 
INNER JOIN shopping_cart on shopping_cart.product_id = product.id 
WHERE shopping_cart.user_id = <user_id>;

有一个ShoppingCart模型,它有一个FK到产品模型。我正在尝试获取用户为其购物车中的所有产品支付的总金额。

目前,在product表中添加另一列不是一种选择。

我知道我可以做到

shopping_cart = ShoppingCart.objects.select_related('product').filter(user_id=<user_id>)

检索产品列表并在python代码中执行产品操作的总和。

Sumproduct using Django's aggregation中建议的答案不符合答案评论中的提及。

除了编写原始SQL查询或在python中进行计算之外,还有其他方法可以在Django中执行此操作吗?

1 个答案:

答案 0 :(得分:0)

如果将其更改为此,其他答案是否有效?

.extra(
    select={'actual_price': 'SUM(cost_price * markup_percentage)'},
).aggregate(total=Sum('actual_price'))['total']