[英]Django - aggregate and annotate for simple operations
我在文檔中看到聚合和注釋功能可用於在查詢中創建新列,因此,如果我編寫類似以下內容:
my_object = ...objects.filter(something).annotate(extra_column=Avg(value))
內部查詢將提供一個額外的列
, AVG(value) AS "extra_column" ...
現在,在我看來,它只能用於count,avg,max和min之類的功能...我可以做一些簡單的+/-特定數字嗎?
我正在嘗試.annotate(extra_column=another_column+1)
或.annotate(extra_column='another_column'+1)
但是它不起作用。
我究竟做錯了什么? 很抱歉這個愚蠢的問題。
您將使用F()
表達式進行算術運算。 F()
是查詢表達式的一部分。 從文檔中:
Django支持使用Python常量,變量甚至其他表達式對查詢表達式進行加,減,乘,除,模算術以及冪運算符。
一個代碼示例是:
from django.db.models import F
my_object = Model.objects.annotate(extra_column=F('another_column') + 1)
my_object = Model.objects.annotate(extra_column=F('another_column') * F('yet_another_column'))
聚合函數確實返回可以通過加,減等操作的整數。
以下示例適用於Django 1.11.6 :
from django.db.models import Count
employees = Employee.objects.annotate(managers=Count('manager') + 10) # every employee has only a single manager.
print employees[0].managers # prints out 11
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.