Django注释平均查询不显示小数位

时间:2019-05-26 15:55:46

标签: django postgresql orm decimal django-annotate

我正在使用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)

1 个答案:

答案 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()
    )
)

根据情况,最好使用FloatFieldDecimalField [Django-doc]

相关问题