Получить 1,2,3,4,5 звезд индивидуально (1ar% +2star% +3star% +4star% +5star%=100%)

Предположим, я оценил пользователя 1 звездой 3 раза, 2 звездой 1 раз, 4 звездой 4 раза, 5 звездой 10 раз. Теперь отсюда любой может узнать общий средний рейтинг, но как я могу получить процент 1 звезды, 2 звезды, 3 звезды, 4 звезды и 5 звезд от общего рейтинга? #показать это на языке django

    rating = Rating.objects.filter(activity__creator=u)
    one_star_count = rating.filter(star='1').count()
    two_star_count = rating.filter(star='2').count()
    three_star_count = rating.filter(star='3').count()
    four_star_count = rating.filter(star='4').count()
    five_star_count = rating.filter(star='5').count()

    total_stars_count = one_star_count + two_star_count+ \
    three_star_count + four_star_count+ five_star_count

Создайте в вашей User модели методы, которые подсчитывают процент, а затем просто используйте их по мере необходимости:

class User(...):
    ...
    def count_star_precentage(self, star):
        return (Rating.objects.filter(activity__creator=self, star=star).count() / self.all_ratings().count()) * 100

    def all_ratings(self):
        return Rating.objects.filter(activity__creator=self)

С ними вы можете получить процент с помощью простого звонка:

 user = User.objects.get(id=some_id)
 user.count_star_precentage(3)    # it will give the percent of total ratings with 3 star given by that user
Вернуться на верх