Skip to main content
 首页 » 编程设计

python之Django:计算平均值,并按子模型中的字段排序

2024年08月30日20shanyou

我有一个 Product 模型,与 Rating 模型具有一对多关系。我之前在产品模型中存储了一个 average_stars 字段,每次为该产品模型添加新评级时我都会更新该字段。我将在 views.py 中有一个函数,它将返回所有 Product 实例的 QuerySet,按 average_star 排序。有没有一种方法可以使用 .aggregate 和 .order_by 的组合,或任何类似的东西,更动态地做到这一点。

换句话说,有没有一种方法可以计算每个产品的所有评分模型的平均值,并按该属性对它们进行排序?哪种方法更好?

请您参考如下方法:

假设您的 Rating 模型有一个 stars 字段,那么您应该使用 annotate :

from django.db.models import Avg 
Product.objects.annotate(average_stars = Avg('rating__stars')).order_by('-average_stars')