import json from django.core.management.base import BaseCommand from university.models import OnlineExam, UserOnlineExam class Command(BaseCommand): def handle(self, *args, **options): exam = OnlineExam.objects.get(pk=1) exam_answer = exam.answers user_exams = UserOnlineExam.objects.filter( online_exam=exam, status=UserOnlineExam.STATUS_FINISHED) user_count = user_exams.count() print('一共有 {} 人参加'.format(user_count)) user_answers = user_exams.values_list('answers', flat=True) data = {} for q_id, answer in exam_answer.items(): data[q_id] = {'answer': answer, 'wrong_answers': [], 'count': 0} for u_a in user_answers: if not self.is_right(answer, u_a.get(q_id)): data[q_id]['wrong_answers'].append(u_a[q_id]) data[q_id]['count'] += 1 data[q_id]['wrong_rate'] = round(data[q_id]['count'] / user_count, 4) print(json.dumps(data)) def is_right(self, exam_answer, user_answer): _flag = False if isinstance(exam_answer, str): if isinstance(user_answer, str) and user_answer == exam_answer: _flag = True if isinstance(user_answer, list) and len(user_answer) == 1 and exam_answer == user_answer[0]: _flag = True if isinstance(exam_answer, list) and isinstance(user_answer, list) and (set(user_answer) == set(exam_answer)): _flag = True return _flag