首页 > 解决方案 > 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)

我已经尝试过玩FloatFields,但也许我做错了。

有什么建议么?

提前致谢!

编辑:这是我的列模型。

col_1 = models.IntegerField(choices=USER_CHOICE)
...
col_6 = models.IntegerField(choices=USER_CHOICE)

标签: djangopostgresqlormdecimaldjango-annotate

解决方案


您可以在此处使用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()
    )
)

根据情况,使用 aFloatFieldDecimalField[Django-doc]可能会更好。


推荐阅读