0

django annotateを使用して、特定の場所の評価とレビュー数をユーザーに表示しています。これを行うための3つのモデルがあります。

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増えることを考えると、助けていただければ幸いです。

4

1 に答える 1

0

試す:

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

現在、各オブジェクトの評価値の平均数ではなく、評価オブジェクトの数の平均を取得しています。

于 2012-11-07T22:16:08.440 に答える