Django注释奇怪的行为
我使用django annotate向用户显示某个地方的评价和评论数量。我有三种模型可以做到这一点:Django注释奇怪的行为,django,annotate,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=mo
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。。。任何帮助都将不胜感激。请尝试:
relevant=Descriptions \
.objects \
.annotate(average_rating = Avg('rating__rating')) \
.annotate(review_count = Count('review'))
目前,您得到的是评级对象数量的平均值,而不是固定评级部分的每个对象的评级值的平均值,现在每次添加评级时,审查部分仍会增加3。如果我取出评级部分,我会得到正确的评级数值,但后来我重写了我为收视率做的注释,所以我在这方面输了。我必须制作两个单独的对象吗?或者有办法解决这个问题吗?输入distinct=True。。。成功了。谢谢你的帮助!