django - 如何在 django 视图中使用类型转换和计算进行求和查询?
问题描述
我正在计算 django 视图和 django 信号中的已售商品成本,我想即时计算已售商品的成本。价格和数量字段是整数。如何将其中一个转换为浮点数并使用以下这些 sql 查询等计算进行求和查询?
SELECT sum((t.price::FLOAT * t.quantity) / 1000) as cost FROM public."sold" t; 选择 t.id, t.price, t.quantity, sum((price::FLOAT * quantity) / 1000) 作为成本 来自公众。“出售”t 按 t.id 分组;
编辑:当然预期的结果是 django 的查询集
我期望第一个查询的输出
成本 ----------------- 5732594.000000002
我期望第二个查询的输出
id 价格 数量 成本 ------------------------------ 846 1100 5000 5500 790 1500 1000 1500 828 2600 1000 2600 938 1000 5000 5000 753 1500 2000 3000 652 5000 1520 7600
编辑2:我通过raw()
像这样的方法解决了这个问题
MyModel.objects.raw( 'SELECT sum((t.price::FLOAT * t.quantity) / 1000) 作为成本' '来自公众。“出售” t' )而不是pythonic方式
解决方案
您需要查看几件事才能做到这一点。第一个是聚合和注释。此外,您还需要查看 Cast 和 F 函数。请查看以下链接:
https://docs.djangoproject.com/en/2.2/topics/db/aggregation/
https://docs.djangoproject.com/en/2.2/ref/models/database-functions/#cast
https://docs.djangoproject.com/en/2.2/ref/models/expressions/
免责声明:这是一个示例,可能不起作用
您的查询集将如下所示:
from django.db.models import FloatField, Sum
from django.db.models.functions import Cast
qs = MyModel.objects.annotate(cost=Sum(F(Cast('price', FloatField())) * F('quantity') / 1000))
推荐阅读
- python - 返回时变量不存在
- java - 从java中的主题读取数据时没有收到avro消息
- flutter - Flutter 应用重新打开后以不寻常的方式启动
- python - 如何使用 Nonetype 将 AWS API Python 代码保存到 CSV
- angular - 茉莉花测试期间不会执行 rxjs subscription.add() 中的代码块。为什么?
- php - 我不能使用 php 的 pda
- python-3.x - 通过 modbus tcp/ip 读取数字输入时出现 GUI 错误 tkinter 的问题
- xml - 一个 XML 文件可以有多个 XSD 吗?
- c# - 安装后报告 RDLC 不显示在新项目面板中没有选项报告和报告 wiz Visual Studio 2019
- android - 如何在我的二维码内容中添加冒号 (:)?