映画評価アプリを製作中です。各ムービーはユーザーが評価することができます。外部キーオブジェクトフィールドの値のリストから平均を取得します。
class MovieRating(models.Model):
movie = models.OneToOneField(Movie)
users = models.ManyToManyField(User, through='UserRating')
average_rating = ???
or whichever is better
@property
def average_rating(self):
???
class UserRating(models.Model):
movie_rating = models.ForeignKey(MovieRating)
user = models.ForeignKey(User)
rating = models.PositiveIntegerField(
default=1,
validators=[
MinValueValidator(1),
MaxValueValidator(10)
]
)
review = models.TextField()
pub_date = models.DateTimeField(default=timezone.now)
class Meta:
unique_together = ('movie', 'user')
私はその映画の平均視聴率を取得したいと思います。
average_rating = (Total rating by user for a MovieRating)/(Total users of MovieRating)
意味私は
movie_rating.users.count()
によってMovieRatingの総ユーザーを取得することができますしかし、どのように私は、合計ですべてのユーザーの評価を得るのですか?それとも、映画の平均評価を得るために私は何ができますか?
更新:
は今、私はこの方法をしていますが、私は、これは行くための正しい方法であるかどうかわからない:
sum([rate.rating for rate in movie_rating.userrating_set.all()])
どうすればround()を使うことができますか? '(1 + 5 + 2)/3=8/3=2.6666 ... 67'以来、私は2.7のような小数点以下1桁まで切り上げたいと思います。しかし、 'round(self.userrating_set.aggregate(Avg( 'rating'))['rating__avg']、1)'私は型エラーを出しています**浮動小数点が必要です**。 –
集計平均で試してみると丸みを帯びていますが、2.666が正しく返されますか?その行だけでうまくいくはずなので、周囲のコードに関連する問題かもしれません。 – yummies