【问题标题】:Django: calculate average, and sort by field in submodelDjango:计算平均值,并按子模型中的字段排序
【发布时间】:2012-09-27 05:42:21
【问题描述】:

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

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

【问题讨论】:

标签: python django average


【解决方案1】:

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

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

【讨论】:

  • 啊,这就是我最终做的事情,但我想过滤掉评分不超过 5 个的产品。当我尝试这样做时,我最终遇到了这个问题:stackoverflow.com/questions/12617515/… 有什么想法吗? ): 谢谢!
猜你喜欢
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-28
  • 1970-01-01
  • 2021-10-27
  • 2011-10-24
  • 1970-01-01
相关资源
最近更新 更多