我在文档中看到聚合和注释函数可用于在查询中创建新列,所以如果我写了类似的东西:
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)
,但它不起作用。
我做错了什么?抱歉这个愚蠢的问题。
答案 0 :(得分:1)
您使用F()
表达式进行算术运算。 F()
是query expressions的一部分。来自文档:
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'))
答案 1 :(得分:0)
聚合函数确实返回可以通过添加,减去等来操纵的整数。
以下示例适用于 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