Как рассчитать процент рейтинга 5 звезд, 4 звезды для объекта
У меня есть этот рейтинг для моего обзора django model.
5 звезд 4 звезды 3 звезды 2 звезды 1 звезда
Я хочу получить процентное содержание каждого компонента на основе рейтинга. Что-то вроде этого:
# get 5 average rating
five_avg_rating = qs.filter(rating=5).aggregate(Avg('rating'))['rating__avg']
five_avg_rating = (five_avg_rating / 5) * 100 if five_avg_rating != None else 0.0
# get 4 average rating
four_avg_rating = qs.filter(rating=4).aggregate(Avg('rating'))['rating__avg']
four_avg_rating = (four_avg_rating / 5) * 100 if four_avg_rating != None else 0.0
....
# get 1 average rating
one_avg_rating = qs.filter(rating=1).aggregate(Avg('rating'))['rating__avg']
one_avg_rating = (one_avg_rating / 5) * 100 if one_avg_rating != None else 0.0
Сумма процентов должна быть = 100%. Таким образом, если математика верна, сложение всех процентов рейтинга должно быть = 100%
Вот изображение того, что я получаю сейчас, а это не то, что я действительно хочу: введите описание изображения здесь
Как я могу реализовать это лучше?
Выполнение нижеприведенных действий, кажется, дает то, что я хочу! Если только нет лучшего способа Django, как это сделать.
# get 5 average rating
five_avg_rating = qs.filter(rating=5).aggregate(Avg('rating'))['rating__avg']
five_avg_rating = ((five_avg_rating * qs.filter(rating=5).count() / qs.count()) * 100) / 5 if five_avg_rating != None else 0.0