首页 > 解决方案 > Django:按答案分组 query_set

问题描述

我正在尝试获取以下内容,但是: {'male': 123, 'female': 432, 'other': 12}

从那里我将计算分配总额的百分比:男性:123/567 = 21% 女性:76% [...]

目前,这是我不工作的解决方案。输出不是我所期望的。你能帮助我吗?

def get_gender_distribution(self):
    answers = (
        Question.objects.filter(
            focus=QuestionFocus.GENDER,
            survey__event=self.request.event,
            survey__template=settings.SURVEY_POST_EVENT,
        )
        .values('answers')
        .annotate(count=Count('answers'))
    )

__在里面__

class QuestionFocus(Choices):
    AGE = 'age'

楷模:

class Question(TimeStampedModel[...]):
    survey = models.ForeignKey(related_name='questions')
    type = models.CharField([...])
    focus = models.CharField([...])

class Answer(TimeStampedModel):
    question = models.ForeignKey(related_name='answers')
    response = models.ForeignKey(related_name='answers')
    answer = models.TextField([...])

class Survey(TimeStampedModel):
    event = models.ForeignKey(related_name='surveys')
    template = models.CharField([...])

标签: pythondjango

解决方案


我会做类似的事情:

def get_gender_distribution(self):
    answers = Question.objects.filter(
                  focus=QuestionFocus.GENDER,
                  survey__event=self.request.event,
                  survey__template=settings.SURVEY_POST_EVENT,
              )
              .values('answers')
              .annotate(total=Count('answers'))

也许换个角度看:aggregation


推荐阅读