Форматирование данных для передачи в диаграмму 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)