2010-04-22 40 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