我正在使用 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 的评分系统。当我输入评分时,我得到的 avg 值为 16,然后增加 0.5 一个新的评分。此外,每次我添加评分时,评论的数量都会增加 3。所以,发生了一些奇怪的事情,但我不确定它到底是什么,特别是考虑到我输入的任何评级值都会增加 3 的评论数量......任何帮助将不胜感激。