2011-05-11 38 views
5

我現在有這樣的在我的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列出所有這些註釋/聚合類?

回答

1

不幸的是,有​​內置的聚合函數,具體來說,沒有一個產品。

但是,除了必須編寫一個「非簡明的」ORM查詢之外,這不會限制你。特別是對於你的情況,你應該能夠做到:

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

謝謝,我第一次看到技術。 – Cogsy 2011-05-11 11:38:00

+0

我可以做這個工作,但是我不得不使用SUM(price * qty),因爲它不遵循double'_'關係,並且聚合不能看到'lineprice'字段。仍然不夠理想恐怕 – Cogsy 2011-05-11 11:52:48

+11

這不行。 'aggregate'看不到'extra'引入的東西(也是'select'需要一個字典,所以它需要'{}'而不是'()') – greg 2012-05-11 08:16:15

0

它沒有明確記載,但可以與F()函數來完成:

from django.db.models import F 

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