Как получить голоса опроса 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