django - Django注释平均查询不显示小数位
问题描述
我正在使用 Django,我正在对某些列值取平均值,但是结果被四舍五入,我想将其设为小数点后一位或两位。我的目标是看到结果看起来像3.5
而不是4
.
我的模型已命名Application
,并且列具有 IntegerField 模型类型。我的数据库是 PostgreSQL。
这是我当前用来获取列值平均值的查询:
ratings = Application.objects.filter(id = review.id).annotate(rate = (F('col_1')+F('col_2')+F('col_3')+F('col_4')+F('col_5')+F('col_6'))/6)
我已经尝试过玩FloatField
s,但也许我做错了。
有什么建议么?
提前致谢!
编辑:这是我的列模型。
col_1 = models.IntegerField(choices=USER_CHOICE)
...
col_6 = models.IntegerField(choices=USER_CHOICE)
解决方案
您可以在此处使用ExpressionWrapper
[Django-doc]将其设置为FloatField
[Django-doc]或DecimalField
:
from django.db.models import ExpressionWrapper, FloatField
ratings = Application.objects.filter(id=review.id).annotate(
rate=ExpressionWrapper(
(F('col_1')+F('col_2')+F('col_3')+F('col_4')+F('col_5')+F('col_6'))/6,
output_field=FloatField()
)
)
根据情况,使用 aFloatField
或DecimalField
[Django-doc]可能会更好。
推荐阅读
- javascript - Django 动态表单集添加按钮不起作用
- python - discord.py 你如何忽略错误并继续前进
- c# - Asp.Net 页面需要很长时间才能加载
- c# - 如何在 Unity3D 中制作平滑的十字准线?
- django - 图像媒体未上传到 AWS S3 媒体文件夹-CKEditor
- mule - 大型输入文件上的 Mule 4 批处理
- bash - 遍历 bash 关联数组
- mysql - SQL 查询效果很好,但我需要全选才能工作
- android - 无法将数据推送到 Firestore 模拟器
- github - 我正在尝试创建一个新的 GitHub 帐户,但验证码不允许我创建