Django 在模型字段上注释 Avg

标签 django postgresql django-queryset django-aggregation django-annotate

我有这些模型:

class Agency(models.Model):
    pass


class User(models.Model):
    agency = models.ForeignKey(Agency)


class Feedback(models.Model):
    rating = models.DecimalField()
    user = models.ForeignKey(User)

我想用所有评分的平均值来注释查询集。我预计这会起作用:

Feedback.objects.annotate(avg_rating=Avg('rating')).values('rating', 'avg_rating')

但它只是输出:

<QuerySet [{'rating': 0.8, 'avg_rating': 0.8}, {'rating': 0.2, 'avg_rating': 0.2}, {'rating': 0.6, 'avg_rating': 0.6}, {'rating': 1.0, 'avg_rating': 1.0}, {'rating': 0.4, 'avg_rating': 0.4}]>

如您所见,平均值应为 3.0。我哪里出错了?

为了清楚起见,我正在尝试做这样的事情:

agencies = Agency.objects.annotate(
    avg_rating=Coalesce(Subquery(
        Feedback.objects.filter(user__agency_id=OuterRef('pk'))
        .values('rating')
        .annotate(avg_rating=Avg('rating', output_field=DecimalField()))
        .values('avg_rating')
    ), 0)
)

其中平均评级是每个机构的。有什么想法吗?

最佳答案

Feedback.objects.aggregate(avg_rating=Avg('rating'))

关于Django 在模型字段上注释 Avg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46664815/

相关文章:

python - 来自 Postman 的 Django POST 请求

python - 名称 'slugify' 未定义

python - Heroku 上找不到 CSS 文件 404

python - 如何链接 Django 查询集以保留单个顺序

python - 基于输入类型的Django查询集

django - 寻找提供 django 模板的资源

sql - SQL 中的双冒号 `::` 表示法

sql - 如何获取 Postgresql 中子查询返回的结果总数?

postgresql - Psycopg2 SQL 语句在查询生成器中工作,而不是在 Python 中工作

python - 一一获取查询集数据