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

时间:2012-09-27 05:42:22

标签: python django average

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

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

1 个答案:

答案 0 :(得分:2)

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

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