Search code examples
pythondjangodjango-modelsdjango-querysetaverage

How to get average from set of objects in Django?


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?


Solution

  • You should use Aggregation(doc):

    from django.db.models import Avg
    
    p = Property.objects.get(...)
    stars_average = list(p.rating_set.aggregate(Avg('stars')).values())[0]
    

    A little bit unsure about my example though.