Групповые результаты 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})

Спасибо

Вернуться на верх