2010-04-22 2 views
8

Hay, у меня есть простая система оценки собственности. Вы даете ему отметку из 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