python - 在 Python/Django 中将两个整数相除并返回浮点数
问题描述
我花了很长时间试图从 Sum(value1) 和 Sum(value2) 的除法中返回 Float 结果
这是我的代码:
kpiCapaTotal = reportKpiCeFilter.aggregate(kpiCapaTotal=Sum('operation_time') / Sum('load_time') * 100).get('kpiCapaTotal')
它返回:89,0 但正确的应该是 89,3
我试过了 :
kpiCapaTotal = reportKpiCeFilter.annotate(kpiCapaTotal=Sum('operation_time') / Cast(Sum('load_time'),FloatField()) * 100, output_field=FloatField()).get('kpiCapaTotal')
它返回一个错误:
“QuerySet.annotate() 收到非表达式:<django.db.models.fields.FloatField>。”
还有聚合:
kpiCapaTotal = reportKpiCeFilter.aggregate(kpiCapaTotal=Sum('operation_time') / Cast(Sum('load_time'),FloatField()) * 100,output_field=FloatField()).get('kpiCapaTotal')
错误:
“QuerySet.aggregate() 收到非表达式:<django.db.models.fields.FloatField>。”
我不知道如何将两个整数的和相除并返回一个浮点数,你知道吗?Python 版本:3.7 Django 版本:2.1
解决方案
您的第二次和第三次尝试有一个小错误:
Cast(Sum('load_time'),FloatField())
您需要FloatField()
作为关键字参数传递output_field
:
Cast(Sum('load_time'), output_field=FloatField())
你也不能传递output_field=FloatField()
给annotate
or aggregate
。
此外,由于您只转换了表达式的一部分(其他部分属于不同类型),因此您需要使用ExpressionWrapper
[Django docs]来设置output_field
.
因此,您的查询将是:
from django.db.models import ExpressionWrapper
kpiCapaTotal = reportKpiCeFilter.aggregate(
kpiCapaTotal=ExpressionWrapper(
Sum('operation_time') / Cast(
Sum('load_time'), output_field=FloatField()
) * 100,
output_field=FloatField()
)
).get('kpiCapaTotal')
推荐阅读
- azure - 获取正在运行的 Kubernetes Pod 内存中的文件列表
- python - 在使用 python 进行网络抓取时,是否有任何直接的方法可以从输出中删除 \xa0
- function - 用递归函数替换lool
- php - Phpmailer oauth2 - 需要专家
- angular - 在 Azure App Service 下运行的远程调试 Angular
- android - Flutter:使用带有 BottomNavigationBar 的可扩展文本字段
- mysql - mysql docker容器启动时laravel迁移数据库
- configuration - Nagiosgraph:为单个服务检查设置对数刻度
- reactjs - 如何使用 Nginx 在不同的 url 上运行两个 js 应用程序?
- javascript - 任何人都可以通过我尝试使用 js 或 python 组合的可视化来指导我吗?