在django orm中对多个注释求和



这是我的模型:

class Product:
name = models.CharField(max_length=80)
price = models.FloatField()
category = models.CharField(max_length=40)
class ProductInventory:
inventory = models.IntegerField()
product = models.OneToOneField(Product, on_delete=models.RESTRICT)

,这里是我想要实现的原始sql,但我如何在django ORM中编写这个?

SELECT product.category, SUM(price) * SUM(product_inventory.inventory) 
FROM product LEFT JOIN product_inventory 
ON product.id=product_inventory.product_id group by product.category;

谢谢。

您可以尝试在annotate中使用Sum,并创建一个名为sum_product的虚拟字段,并像这样传递值。希望这对你有用。

from django.db.models import Sum
Product.objects.annotate(sum_product=Sum('price') * Sum('productinventory__inventory')).values('category', 'sum_product')

最新更新