Django 注释平均查询不显示小数位
Django annotate average query not showing decimal places
我正在使用 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] here to set this to a FloatField
[Django-doc] 或 DecimalField
:
from django.db.models import <b>ExpressionWrapper</b>, FloatField
ratings = Application.objects.filter(id=review.id).annotate(
rate=<b>ExpressionWrapper(</b>
(F('col_1')+F('col_2')+F('col_3')+F('col_4')+F('col_5')+F('col_6'))/6,
<b>output_field=FloatField()</b>
<b>)</b>
)
根据情况,使用 FloatField
或 DecimalField
[Django-doc] 可能更好。
我正在使用 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] here to set this to a FloatField
[Django-doc] 或 DecimalField
:
from django.db.models import <b>ExpressionWrapper</b>, FloatField
ratings = Application.objects.filter(id=review.id).annotate(
rate=<b>ExpressionWrapper(</b>
(F('col_1')+F('col_2')+F('col_3')+F('col_4')+F('col_5')+F('col_6'))/6,
<b>output_field=FloatField()</b>
<b>)</b>
)
根据情况,使用 FloatField
或 DecimalField
[Django-doc] 可能更好。