4

我有一个 Product 模型,与 Rating 模型具有一对多的关系。我之前在 Product 模型中存储了一个 average_stars 字段,每次为该 Product 模型添加新的 Rating 时我都会更新该字段。我将在views.py 中有一个函数,它将返回所有产品实例的查询集,按average_star 排序。有没有办法使用 .aggregate 和 .order_by 的组合或任何类似的方法来更动态地执行此操作。

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

4

1 回答 1

5

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

from django.db.models import Avg
Product.objects.annotate(average_stars = Avg('rating__stars')).order_by('-average_stars')
于 2012-09-27T11:17:28.930 回答