Django - 为简单操作聚合和注释

时间:2018-01-26 23:37:47

标签: python django

我在文档中看到聚合和注释函数可用于在查询中创建新列,所以如果我写了类似的东西:

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),但它不起作用。

我做错了什么?抱歉这个愚蠢的问题。

2 个答案:

答案 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