使用 .extra 进行 Django 查询

Make Django query with .extra

我的目标是创建一个查询来计算我的字段的绝对值并计算它们的平均值。我已经阅读了它,并且开始在 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 查询有效?

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

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')))