2010-04-22 12 views
8

Hay, tengo un sistema de calificación simple para una propiedad. Le das una marca de 5 (estrellas). Los modelos se definen como estoobtener promedio del conjunto de objetos en django

def Property(models.Model) 
    # stuff here 

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

Lo que quiero hacer es conseguir una propiedad, encontrar todos los objetos de Calificación, recogerlos, a continuación, obtener el promedio 'estrellas' de ellos.

alguna idea de cómo hacer esto?

Respuesta

24

Debe utilizar Aggregation(doc):

from django.db.models import Avg 

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

Un poco inseguro sobre mi ejemplo sin embargo.

+0

El ejemplo fue perfecto :) Muchas gracias drmegahertz. – dotty

+1

Para propiedades múltiples en una sola consulta puede usar 'Property.objects.annotate (Avg ('rating__stars'))' – Zach

+0

Muchas gracias – Nirri

Cuestiones relacionadas