Как рассчитать процент рейтинга 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
        
Вернуться на верх