summaryrefslogtreecommitdiff
path: root/yaksh/models.py
diff options
context:
space:
mode:
authorankitjavalkar2021-01-11 10:09:03 +0530
committerGitHub2021-01-11 10:09:03 +0530
commiteb01109de13d6de6e87edc72526f7aec8539802f (patch)
treee872816bf1321e2617630694a88f2a647a6299cd /yaksh/models.py
parent98124aaa624ea09e131b6e3563f78bc5d48061ad (diff)
parentd7b7b2967b68045bda590af57a123b4d17d16e9c (diff)
downloadonline_test-eb01109de13d6de6e87edc72526f7aec8539802f.tar.gz
online_test-eb01109de13d6de6e87edc72526f7aec8539802f.tar.bz2
online_test-eb01109de13d6de6e87edc72526f7aec8539802f.zip
Merge pull request #767 from ankitjavalkar/add_stats_q
Add feature to count number of times MCQ option has been selected
Diffstat (limited to 'yaksh/models.py')
-rw-r--r--yaksh/models.py43
1 files changed, 40 insertions, 3 deletions
diff --git a/yaksh/models.py b/yaksh/models.py
index 686d0e6..73fbb66 100644
--- a/yaksh/models.py
+++ b/yaksh/models.py
@@ -1992,6 +1992,32 @@ class AnswerPaperManager(models.Manager):
questions.append(question.id)
return Counter(questions)
+ def get_per_answer_stats(self, questionpaper_id, attempt_number,
+ course_id, status='completed'):
+ papers = self.filter(question_paper_id=questionpaper_id,
+ course_id=course_id,
+ attempt_number=attempt_number, status=status)
+ questions = Question.objects.filter(
+ questions__id__in=papers,
+ ).distinct()
+
+ stats = {}
+ for question in questions:
+ answers = Answer.objects.filter(
+ answerpaper__id__in=papers, question=question.id
+ ).values('answer', 'question__id', 'answerpaper__id')
+ question_ans_count = {}
+ answerpaper_count = []
+ for ans in answers:
+ if ans.get('answerpaper__id'):
+ if ans.get('answer') not in question_ans_count:
+ question_ans_count[ans.get('answer')] = 1
+ else:
+ question_ans_count[ans.get('answer')] += 1
+ answerpaper_count.append(ans.get('answerpaper__id'))
+ stats[question] = question_ans_count
+ return stats
+
def get_all_questions_answered(self, questionpaper_id, attempt_number,
course_id, status='completed'):
''' Return a dict of answered question id as key and count as value'''
@@ -2045,16 +2071,27 @@ class AnswerPaperManager(models.Manager):
course_id)
questions = self.get_all_questions(questionpaper_id, attempt_number,
course_id)
+ per_answer_stats = self.get_per_answer_stats(
+ questionpaper_id, attempt_number, course_id
+ )
all_questions = Question.objects.filter(
id__in=set(questions),
active=True
).order_by('type')
for question in all_questions:
if question.id in questions_answered:
- question_stats[question] = [questions_answered[question.id],
- questions[question.id]]
+ question_stats[question] = {
+ 'answered': [questions_answered[question.id],
+ questions[question.id]],
+ 'per_answer': per_answer_stats[question],
+ }
+
else:
- question_stats[question] = [0, questions[question.id]]
+ question_stats[question] = {
+ 'answered': [0, questions[question.id]],
+ 'per_answer': per_answer_stats[question],
+ }
+
return question_stats
def _get_answerpapers_for_quiz(self, questionpaper_id, course_id,