2010-04-22 70 views
8

干草,我有一个简单的评分系统。你给它5分(星)标记。该模型是这样定义从django中的一组对象中获取平均值

def Property(models.Model) 
    # stuff here 

def Rating(models.Model) 
    property = models.ForeignKey(Property) 
    stars = models.IntegerField() 

我想要做的就是一个属性,找到所有的评级对象,收集它们,然后从他们那里得到的平均“明星”。

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

回答

24

你应该使用Aggregation(doc)

from django.db.models import Avg 

p = Property.objects.get(...) 
stars_average = p.rating_set.aggregate(Avg('stars')).values()[0] 

有点不确定我的例子,虽然。

+0

例子是现货:)非常感谢你drimerhertz。 – dotty 2010-04-22 09:53:18

+1

对于一个查询中的多个属性,你可以使用'Property.objects.annotate(Avg('rating__stars'))' – Zach 2010-04-22 13:57:11

+0

非常感谢你 – Nirri 2016-02-02 11:36:58