django

2010-04-22 9 views
8

Hay in nesneleri kümesinden ortalama al, bir özellik için basit bir derecelendirme sistemine sahip. Ona 5 (yıldız) işareti veriyorsunuz. Modeller Ne yapmak istediğim, bir özellik olsun tüm Puanlama nesneleri bulmak, onları toplamak, sonra onlardan ortalama 'yıldız' olsun budjango

def Property(models.Model) 
    # stuff here 

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

gibi tanımlanır.

Herhangi bir fikir nasıl yapılır?

cevap

24

Sen Aggregation(doc) kullanmalıdır: Benim örnek hakkında

from django.db.models import Avg 

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

Biraz emin olsa.

+0

Örnek üzerinde nokta vardı :) Çok teşekkür ederim drmegahertz. – dotty

+1

Tek bir sorguda birden çok özellik için 'Property.objects.annotate 'yi kullanabilirsiniz (Avg (' rating__stars '))' – Zach

+0

Çok teşekkür ederim – Nirri