Sql Django在相关表上用条件注释sum

Sql Django在相关表上用条件注释sum,sql,django,orm,annotate,Sql,Django,Orm,Annotate,我需要获取带有“已使用”值注释的库存查询集。 “已使用”值由所有相关订单的数量决定,但处于活动状态 编辑: 更准确地说,我只需要对活动订单的数量求和。我用原始SQL得出了答案: class Inventory(models.Model): ... product = models.ForeignKey('Product') quantity = models.IntegerField(default=0) class Order(models.Model):

我需要获取带有“已使用”值注释的库存查询集。 “已使用”值由所有相关订单的数量决定,但处于活动状态

编辑
更准确地说,我只需要对活动订单的数量求和。

我用原始SQL得出了答案:

class Inventory(models.Model):
    ...
    product = models.ForeignKey('Product')
    quantity = models.IntegerField(default=0)


class Order(models.Model):
    ...
    quantity = models.IntegerField()
    inventory = models.ForeignKey('Inventory')
    active = models.BooleanField(default=True)

# Not considering the orders that are not active
queryset = Inventory.objects.annotate(
    used=Sum('order__quantity')
).filter(product=product)
queryset = Inventory.objects.filter(product=product, 
    order__active=True).aggregate(
    Sum('order__quantity'))

sum = queryset['order__quantity__sum']

这将筛选订单仅处于活动状态的库存。也许我的问题不清楚。对不起。我要找的是活动订单的所有“订单数量”的总和。就像在总和中嵌套一个过滤器。这就是你需要的,对吗<代码>我需要获取已注释“已使用”值的库存查询集“已使用”值由所有相关订单的数量决定,但处于活动状态。ok updated,
处于活动状态的订单的所有“订单数量”之和。
我需要对该和进行注释。在原始SQL中,它可能是这样的:
SUM(当“order\u invoiceline.”“active”=1,然后是“orders\u invoiceline.”“quantity”否则0结束)
SELECT "products_inventory"."id", "products_inventory"."product_id", "products_inventory"."quantity",
SUM(CASE WHEN "orders_order"."active" = True THEN "orders_order"."quantity" ELSE 0 END)
AS "used" FROM "products_inventory"
LEFT OUTER JOIN "orders_order" ON ("products_inventory"."id" = "orders_order"."inventory_id")
WHERE "products_inventory"."product_id" = id_of_product
GROUP BY "products_inventory"."id", "products_inventory"."product_id", "products_inventory"."quantity",
ORDER BY "products_inventory"."id" ASC