【问题标题】:Django annotate average query not showing decimal placesDjango注释平均查询不显示小数位
【发布时间】:2019-10-12 09:10:59
【问题描述】:

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

【问题讨论】:

  • 可以分享模型吗?我猜col_1等是IntegerFields?
  • @WillemVanOnsem 是的!它们是整数字段。我刚刚添加了上面的模型。

标签: django postgresql orm decimal django-annotate


【解决方案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] 可能会更好。

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 2016-12-25
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    相关资源
    最近更新 更多