Django注释了奇怪的行为

时间:2012-11-07 22:08:59

标签: django annotate

我正在使用django annotate向用户显示某个地方的评价和评论数量。我有三种模式可以做到这一点:

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,然后增加.5新的评级。此外,每次添加评分时,审核次数都会增加3。所以,一些奇怪的事情正在发生,但我不确定它究竟是什么,特别是考虑到我提出的任何评级值的评论数量增加了3 ...任何帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

尝试:

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

目前,您正在获得评级对象数量的平均值,而不是每个对象的评级值的平均值