从django中的对象集获得平均值

dot*_*tty 13 python django average

干草,我有一个简单的财产评级系统.你给它一个标记5(星).模型定义如下

def Property(models.Model)
    # stuff here

def Rating(models.Model)
    property = models.ForeignKey(Property)
    stars = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

我想要做的是获得一个属性,找到所有评级对象,收集它们,然后从它们获得平均'星'.

任何想法如何做到这一点?

小智 31

您应该使用聚合(doc):

from django.db.models import Avg

p = Property.objects.get(...)
stars_average = p.rating_set.aggregate(Avg('stars')).values()[0]
Run Code Online (Sandbox Code Playgroud)

虽然对我的例子有点不确定.

  • 对于单个查询中的多个属性,您可以使用 `Property.objects.annotate(Avg('rating__stars'))` (2认同)