Форматирование данных для передачи в диаграмму Javascript

Заранее извините за сумбурный пост. У меня есть несколько анкет, которые используются для оценки проекта по разным направлениям, таким как маркетинг, затраты и т.д. Я пытаюсь построить график, который показывает оценку каждого проекта по каждой области.

Формат графика должен быть

               name: 'Project Name',
               data: [2,5,1,4,4,5,6,2]
             }],

при этом каждое число является оценкой каждой области.

Мне удалось дойти до сбора баллов по каждому проекту для каждой области, но он дублирует название проекта для каждой анкеты.

[projectName1, Questionnaire1, Score]
[projectName1, Questionnaire2, Score]
[projectName2, Questionnaire1, Score]
...

Я не уверен в подходе, который мне нужно использовать:

for project in all_projects:
        for q in questionnaires:
            print("getting ", q.title, "responses for", project.name, project.id)
            if ProjectQuestionnaireResponse.objects.filter(project_name_id=project.id, questionnaire_id = q.id).exists():     
                q_response = ProjectQuestionnaireResponse.objects.get(project_name_id=project.id, questionnaire_id = q.id)
                q_answered = ProjectQuestionnaireAnswer.objects.filter(response = q_response, answer__isnull=False).count()
                if q_answered > 1:
                    q_count = (100 / ProjectQuestionnaireQuestion.objects.filter(questionnaire_id = q.id).count() * q_answered)
                else:
                    q_count = 0
                q_rounded = (5 * round(q_count / 5))

                # Scoring Calculator #

                # Get Questionnaire Range
                total_questions =ProjectQuestionnaireQuestion.objects.filter(questionnaire_id = q.id).count()
                score_range = (4 * total_questions)
                
                green = 2
                red = -2

                green_answer_value = (ProjectQuestionnaireAnswer.objects.filter(response = q_response,answer__choice_value="Green").count() * green)
                red_answer_value = (ProjectQuestionnaireAnswer.objects.filter(response = q_response,answer__choice_value="Red").count() * red)
                                    
                total_score = (green_answer_value + red_answer_value )
                
                if total_score is not None:               
                    final_score = round(((2 * total_questions + total_score) / score_range) * 10,2)
                else:
                    pass         
                results.append({'q_rounded':q_rounded,'title':q.title,'final_score':final_score,"project":project})
                
            else:
                q_rounded = 0
                
                results.append({'q_rounded':q_rounded,'title':q.title,"project":project})
class ProjectQuestionnaire(models.Model):
    title = models.CharField(max_length=50, blank=False, unique=True)

    def __str__(self):
        return str(self.title)
    

class ProjectQuestionnaireQuestion(models.Model):
    questionnaire = models.ForeignKey(ProjectQuestionnaire, on_delete=models.CASCADE)
    sequence = models.IntegerField()
    question = models.TextField()
    description = models.TextField(blank=True)

    def __str__(self):
        return str(self.question)

class ProjectQuestionnaireResponse(models.Model):
    project_name = models.ForeignKey(Project, on_delete=models.CASCADE)
    questionnaire = models.ForeignKey(ProjectQuestionnaire, on_delete=models.CASCADE)
    user = models.CharField(max_length=50, blank=True)

    class Meta:
        constraints = [
                models.UniqueConstraint(fields= ['project_name','questionnaire'], name='project_unique_response1'),
            ]
    def __str__(self):
        return str(self.project_name)

class Choice(models.Model):
    question = models.ForeignKey(ProjectQuestionnaireQuestion, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    choice_value = models.CharField(max_length=20, blank=True)
    choice_weight = models.IntegerField(blank=True, null=True)

    def __str__(self):
        return str(self.choice_text)

class ProjectQuestionnaireAnswer(models.Model):
    YN_Choices = [
        ('Yes', 'Yes'),
        ('No', 'No'),
        ('Unknown', 'Unknown')
    ]
    question = models.ForeignKey(ProjectQuestionnaireQuestion, on_delete=models.CASCADE)
    answer = models.ForeignKey(Choice, on_delete=models.CASCADE,null=True)
    value = models.CharField(max_length=20, blank=True)
    notes = models.TextField(blank=True)
    response = models.ForeignKey(ProjectQuestionnaireResponse, on_delete=models.CASCADE)
    
    class Meta:
        constraints = [
                models.UniqueConstraint(fields=['question','response'], name='project_unique_response2'),
            ]

    def __str__(self):
        return str(self.answer)
Вернуться на верх