Как получить голоса опроса Django в процентном формате?

Я использовал учебник для создания приложения для опроса... и я расширял его... у меня все работает... но я не могу понять, как превратить голоса в проценты...

Я пытался сделать что-то вроде...

def percentage(self):
     return 100 * (self.votes) / (self.survey)

Но это не работает...

Мои модели выглядят как...

class Choice(models.Model):
 
    choice = models.TextField(max_length=264,blank=True,null=True,unique=False)
    survey = models.ForeignKey("Survey",on_delete=models.CASCADE,related_name="choice_survey")
    votes = models.IntegerField(default=0)

class Survey(models.Model):
 
    survey_name = models.CharField(max_length=255,blank=True,null=True,unique=False)
    survey_type = models.CharField(choices=STATUS_CHOICES8,blank=True,max_length=300)

Я видел примеры annotate и также играл с ними. Нужно ли мне отслеживать общее количество голосов как атрибут? Все другие примеры, которые я видел, - это foreignkey. Я вполне могу получить количество голосов, получив целочисленное поле. Я просто не могу понять, как преобразовать это в проценты.

Заранее спасибо за любые предложения.

Процент - это доля определенного значения. В этом случае вам нужно что-то, с чем можно сравнить количество голосов за данный выбор - например, количество всех голосов за все варианты.

Предположим, что у вас очень простой опрос (например, только один вопрос с множественным выбором), тогда вы можете получить это число по

def percentage(self):
     total_votes = Choice.objects.filter(survey=self.survey).count()
     return (self.votes / total_votes) * 100

Если в вашем опросе много вопросов, то вам понадобится промежуточная модель, например Question, чтобы в опросе было много вопросов, а в них, в свою очередь, много вариантов выбора. Затем вы можете сделать с Question то же самое, что мы делали с survey выше.

Я смог решить свою проблему, обратившись к этой ранее документированной проблеме на SO. Как вызвать пользовательский метод на модели с шаблоном в Django?

Я смог ответить на свой вопрос, используя решение, документированное здесь....

Как вызвать пользовательский метод на модели с шаблоном в Django?

Мой окончательный ответ выглядит так....

def percentage(self):
    total = 0.0
    for choice in self.poll.choice_set.all():
        total = total + choice.votes
    return (self.votes/total)*100
Вернуться на верх