在 django orm 中对多个注释求和
Posted
技术标签:
【中文标题】在 django orm 中对多个注释求和【英文标题】:Sum multiple annotates in django orm 【发布时间】:2021-11-03 06:05:41 【问题描述】:这是我的模型:
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;
谢谢。
【问题讨论】:
【参考方案1】:您可以尝试在注释中使用 Sum 并创建一个名称为 sum_product 的虚拟字段,并将其传递给这样的值。希望这对你有用。
from django.db.models import Sum
Product.objects.annotate(sum_product=Sum('price') * Sum('productinventory__inventory')).values('category', 'sum_product')
【讨论】:
以上是关于在 django orm 中对多个注释求和的主要内容,如果未能解决你的问题,请参考以下文章