2010-04-22 11 views
8

Hay, ho un semplice sistema di valutazione per una proprietà. Gli dai un voto su 5 (stelle). I modelli sono definiti come questoottenere media dal set di oggetti in django

def Property(models.Model) 
    # stuff here 

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

Quello che voglio fare è ottenere una proprietà, trovare tutti gli oggetti di Rating, li raccoglie, quindi ottenere le 'stelle' media da loro.

qualche idea su come fare questo?

risposta

24

Si dovrebbe usare Aggregation(doc):

from django.db.models import Avg 

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

Un po 'incerti circa il mio esempio però.

+0

Esempio era azzeccato :) Grazie mille drmegahertz. – dotty

+1

Per più proprietà in una singola query puoi usare 'Property.objects.annotate (Avg ('rating__stars'))' – Zach

+0

Grazie mille – Nirri

Problemi correlati