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

예제는 다음과 같습니다. :) drmegahertz 대단히 감사합니다. – dotty

+1

단일 쿼리에서 여러 속성을 사용할 경우 'Property.objects.annotate (Avg ('rating__stars '))' – Zach

+0

고맙습니다. – Nirri