Групповые результаты queryset
У меня есть функция, которая возвращает projectName, QuestionnaireTitle и finalScore Функция проходит через каждый проект и каждую анкету.
Я пытаюсь отформатировать данные так, чтобы в итоге получить список или dict, содержащий имя проекта и баллы для каждой анкеты, чтобы я мог передать это в JSChart.
Формат графика следующий:
name: 'Project Name',
data: [5,8,4,7,2,5,5,7]
Мой текущий набор запросов возвращает:
{'q_rounded': 100, 'title': 'Product Evaluation', 'final_score': 5.0, 'project': <Project: C>}
{'q_rounded': 100, 'title': 'Community', 'final_score': 5.0, 'project': <Project: C>}
{'q_rounded': 100, 'title': 'Marketing', 'final_score': 5.0, 'project': <Project: C>}
{'q_rounded': 0, 'title': 'Product Evaluation', 'project': <Project: D>}
{'q_rounded': 0, 'title': 'Community', 'project': <Project: D>}
{'q_rounded': 0, 'title': 'Marketing', 'project': <Project: D>}
{'q_rounded': 0, 'title': 'Product Evaluation', 'project': <Project: E>}
{'q_rounded': 0, 'title': 'Community', 'project': <Project: E>}
{'q_rounded': 0, 'title': 'Marketing', 'project': <Project: E>}
Есть ли способ сгруппировать результаты так, чтобы у меня было:
ProjectC,5,5,5
ProjectD ...
ProjectE ...
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 Calulator #
# 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})
Спасибо