两个字段注释的产品

时间:2011-05-11 09:50:49

标签: django django-models

我目前在我的Django应用程序中有一行:

db.execute("SELECT SUM(price * qty) FROM inventory_orderline WHERE order_id = %s", [self.id])

我宁愿通过我的Django提供的模型界面执行此操作,但找不到任何引用。

我很确定这可以通过注释来完成,但这些示例仅涵盖了其中一些,我在文档中找不到列表。

我想做这样的事情:

self.line_items.annotate(lineprice=Product('orderline__price', 'orderline__qty')).aggregate(Sum('lineprice'))

有人可以建议使用注释类来执行乘法吗?更好的是,列出所有这些注释/聚合类的API的链接?

2 个答案:

答案 0 :(得分:1)

不幸的是,aren't enough内置了聚合函数,具体而言,没有一个用于Product。

但除了必须编写“非简明”ORM查询之外,这并不会限制您。特别针对您的情况,您应该能够:

self.line_items.extra(select=("lineprice": "orderline__price*orderline__qty")).aggregate(Sum('lineprice'))

答案 1 :(得分:0)

没有明确记录,但这可以通过F()函数完成:

from django.db.models import F

self.line_items.annotate(lineprice=F('orderline__price') * F('orderline__qty')).aggregate(Sum('lineprice'))