views:

47

answers:

1

Hay, i have a simple rating system for a property. You give it a mark out of 5 (stars). The models are defined like this

def Property(models.Model)
    # stuff here

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

What i want to do is get a property, find all the Rating objects, collect them, then get the average 'stars' from them.

any ideas how to do this?

+4  A: 

You should use aggregation:

from django.db.models import Avg

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

A little bit unsure about my example though.

drmegahertz
Example was spot on :) Thank you very much drmegahertz.
dotty
For multiple properties in a single query you can use `Property.objects.annotate(Avg('rating__stars'))`
Zach