【问题标题】:Aggregation in Django viewset - Django Rest Framework:Django 视图集中的聚合 - Django Rest 框架:
【发布时间】:2020-08-08 08:55:35
【问题描述】:

我有一个具有以下属性的表-

created_at = TimestampField(auto_now_add=True,auto_now_update=False, editable=False)
updated_at = TimestampField(null=True,auto_now_update=True, editable=False)

一个服务在那里运行,首先进入系统,我们捕获 created_at 时间戳。

在服务完成一段时间后,脚本会更新表属性,我们会捕获 updated_at 时间戳。

所以现在我想找到服务部署时间的平均值,即添加 (updated_at-created_at) 除以总服务,或者我们可以说表中的总行数。

所以查询需要在 Django ORM 中实现,并且必须序列化到端点。

这样可以在前端获取数据。

你们能帮我解决这个问题吗?

提前致谢!

【问题讨论】:

  • 我们可以使用 queryset = Server.objects.filter().aggregate(avg_time=Avg(F('updated_at')-F('created_at'))) 但我必须序列化查询集。

标签: django django-rest-framework annotations aggregate-functions django-filter


【解决方案1】:

更新 1: Model.objects.annotate(avg_serv_dep=F('modified') - F('created')).aggregate(Avg('avg_serv_dep'))


你可以试试Model.objects.annotate(avg_serv_dep=Avg(F('updated_at') - F('created_at')))

【讨论】:

  • 我已经实现了那个......它只给出以微秒为单位的时间差......缺少平均值
  • 或者即使我在做 Min,Max 也会给出相同的结果...
  • 你可以试试Model.objects.annotate(avg_serv_dep=F('modified') - F('created')).aggregate(Avg('avg_serv_dep'))
【解决方案2】:
I just came to these solutions.

queryset1=Model.objects.aggregate(y=(Max(F('updated_at')-F('created_at'),output_field=FloatField()))/60000000)

/60000000  to convert microsecond to minutes
AND

queryset = Model.objects.filter().values('attr1','attr2')\
           .annotate(min_time=Min(F('updated_at')- 
            F('created_at')),max_time=Max(F('updated_at')- 
            F('created_at')),avg_time=Avg(F('updated_at')- 
            F('created_at'))).order_by('attr1')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-04
    • 2023-04-08
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多