2010-04-22 11 views
8

Hay, mam prosty system oceny dla nieruchomości. Dajesz mu znak z 5 (gwiazdek). Modele są zdefiniowane jak tenuzyskać średnią z zestawu obiektów w django

def Property(models.Model) 
    # stuff here 

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

co chcę zrobić, to nieruchomości, znaleźć wszystkie obiekty Rating, zebrać je, a następnie uzyskać średnie „gwiazdy” od nich.

wszelkie pomysły, jak to zrobić?

Odpowiedz

24

Należy użyć Aggregation(doc):

from django.db.models import Avg 

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

Trochę niepewny o moim przykładzie chociaż.

+0

Przykład był na miejscu :) Dziękuję bardzo drmegahertz. – dotty

+1

Dla wielu właściwości w jednym zapytaniu możesz użyć 'Property.objects.annotate (Avg ('rating__stars'))' – Zach

+0

Bardzo dziękuję – Nirri

Powiązane problemy