2012-11-07 57 views
0

我使用django註釋向用戶顯示某個地點的評論等級和數量。我有三種模式可以做到這一點:Django註釋怪異行爲

class Descriptions(models.Model): 
    name=models.CharField(max_length=50) 
    website=models.CharField(max_length=50,blank=True) 
    street1=models.CharField(max_length=50,blank=True) 
    street2=models.CharField(max_length=50,blank=True) 
    city=models.CharField(max_length=50,blank=True) 
    state=models.CharField(max_length=50,blank=True) 
    zip=models.CharField(max_length=5,blank=True) 
    description=models.TextField() 
    areas_related=models.TextField() 
    add_area=models.CharField(max_length=50,blank=True) 
    federal=models.NullBooleanField(null=True) 
    lat=models.TextField(blank=True) 
    long=models.TextField(blank=True) 
    creator=models.ForeignKey(User) 

    def __unicode__(self): 
     return u'%s %s %s %s %s %s %s %s %s %s %s %s %s' %(self.name,self.website,self.street1, 
     self.street2,self.city,self.state,self.zip,self.description,self.add_area, self.federal, self.lat, self.long, self.creator) 

爲地方。然後我有:

class Rating(models.Model): 
    rating=models.IntegerField(blank=True) 
    place=models.ForeignKey(Descriptions) 

    def __unicode__(self): 
     return u'%s %s' %(self.rating, self.place) 

爲收視率。最後:

class Review(models.Model): 
    user=models.ForeignKey(User) 
    place=models.ForeignKey(Descriptions) 
    review=models.TextField(blank=True) 

    def __unicode__(self): 
     return u'%s %s %s' % (self.user, self.place, self.review) 

,我使用該工具來獲取場所,具有評級和評論沿:

relevant=Descriptions.objects.annotate(Avg('rating')).annotate(Count('review')) 

......不過,我有1評級系統5.當我輸入一個評級,我得到的平均值爲16,然後增加0.5。新的評級被添加。另外,每次添加評分時,審覈計數都會增加3。所以,一些奇怪的事情正在發生,但我不確定它到底是什麼,特別是考慮到評論數量增加了3,因爲我給出的任何評分值......任何幫助將不勝感激。

回答

0

嘗試:

relevant=Descriptions \ 
    .objects \ 
    .annotate(average_rating = Avg('rating__rating')) \ 
    .annotate(review_count = Count('review')) 

目前你正在收視對象,而不是爲每個對象

+0

那固定的收視率部分的平均數評價值的,現在審查的數量的平均值每增加一個評分,部分依然增加3個。 – sam

+0

如果我拿出評分部分,我會得到正確的評分數值,但是我會覆蓋我爲評分所做的評註,因此我錯失了那。我需要製作兩個獨立的物體嗎?或者有沒有辦法解決這個問題? – sam

+0

放入鮮明的=真的...這樣做。謝謝您的幫助! – sam