我正在使用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
,但是也许我做错了。
有什么建议吗?
谢谢!
编辑:这是我的列模型。
col_1 = models.IntegerField(choices=USER_CHOICE)
...
col_6 = models.IntegerField(choices=USER_CHOICE)
答案 0 :(得分:1)
您可以在此处使用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()
)
)
根据情况,最好使用FloatField
或DecimalField
[Django-doc]。