使用.extra进行Django查询

时间:2018-02-06 15:02:25

标签: django django-queryset absolute-value

我的目标是创建一个查询,计算我的字段的绝对值并计算它们的平均值。我已经阅读了它并且我在Django中使用.extra可能性但我无法实现我的目标。我也尝试了我想要的SQl查询。提前谢谢。

所需的结果将是该PosreSql查询的结果:

SELECT
  time_stamp,
  AVG(ABS(ddt))
FROM tropo
WHERE time_stamp BETWEEN '2018-01-16 8:00' AND '2018-01-17 8:00'
GROUP BY time_stamp

我的尝试是在Django中:

Table.objects.all().filter(time_stamp__range=(2018-01-16 8:00, 2018-01-17 8:00))
.extra(select={"field_abs": "abs(field)"})
.values('time_stamp')
.annotate(avg_field=Avg('field_abs'))

如何判断我的Djanogo查询有效?

1 个答案:

答案 0 :(得分:1)

我认为你真的不需要额外的查询,试试这个:

from django.db.models import Func, Avg

tables = Table.objects.filter(time_stamp__range=(2018-01-16 8:00, 2018-01-17 8:00))
tables = tables.values('time_stamp').annotate(avg_field=Avg(Func('field', function='ABS')))