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)

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

有什么建议吗?

提前致谢!

编辑:这是我的列模型。

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>
)

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