def to_representation(self, instance): """ Only quiz_ids are stored originally in concept sections Fetch quiz details from the quiz_ids """ ret = super(ConceptSectionSerializer, self).to_representation(instance) if instance.has_quizzes(): quiz_ids = ret['data']['quiz_ids'] quiz_models = Quiz.get_detailed_quizzes_in(quiz_ids) quiz_list = QuizSerializer(quiz_models, many=True).data quiz_dict = {} for quiz in quiz_list: quiz_dict[quiz['id']] = quiz ordered_quizzes = [] for quiz_id in quiz_ids: ordered_quizzes.append(quiz_dict[quiz_id]) del ret['data']['quiz_ids'] ret['data']['quizzes'] = ordered_quizzes elif instance.has_codequizzes(): quiz_ids = ret['data']['quiz_ids'] models = CodeQuiz.objects.filter(pk__in=quiz_ids) quizzes = CodeQuizSerializer(models, many=True).data quiz_dict = {} for quiz in quizzes: quiz_dict[quiz['id']] = quiz ordered_quizzes = [] for quiz_id in quiz_ids: ordered_quizzes.append(quiz_dict[quiz_id]) del ret['data']['quiz_ids'] ret['data']['quizzes'] = ordered_quizzes return ret
def course_pretest_quiz(self): section_type = ConceptSection.COURSE_PRETEST section = self.conceptsection_set.filter(type=section_type).last() if not section: return None quiz_ids = section.get_quiz_info() if not quiz_ids: return None quiz_id = quiz_ids[0] quiz = Quiz.get_detailed_quizzes_in([quiz_id]).first() if not quiz: # todo -> log error here return None serializer = QuizSerializer(quiz) return serializer.data
def get_quizzes_in_sections(klass, sections): quiz_sections = klass.get_quiz_sections(sections) all_quiz_ids = [] section_id_by_quiz_id = {} section_quizzes = defaultdict(list) for section in quiz_sections: for quiz_id in section.get_quiz_info(): all_quiz_ids.append(quiz_id) section_id_by_quiz_id[quiz_id] = section.id quizzes = Quiz.get_detailed_quizzes_in(all_quiz_ids) for quiz in quizzes: section_id = section_id_by_quiz_id[str(quiz.id)] serializer = QuizSerializer(quiz) section_quizzes[str(section_id)].append(serializer.data) return section_quizzes