diff options
Diffstat (limited to 'yaksh/models.py')
-rw-r--r-- | yaksh/models.py | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/yaksh/models.py b/yaksh/models.py index fd4ae3f..f065190 100644 --- a/yaksh/models.py +++ b/yaksh/models.py @@ -78,7 +78,6 @@ string_check_type = ( attempts = [(i, i) for i in range(1, 6)] attempts.append((-1, 'Infinite')) -days_between_attempts = [(j, j) for j in range(401)] test_status = ( ('inprogress', 'Inprogress'), @@ -297,8 +296,8 @@ class Quiz(models.Model): # Number of attempts for the quiz attempts_allowed = models.IntegerField(default=1, choices=attempts) - time_between_attempts = models.IntegerField( - "Number of Days", choices=days_between_attempts + time_between_attempts = models.FloatField( + "Time Between Quiz Attempts in hours" ) is_trial = models.BooleanField(default=False) @@ -338,20 +337,32 @@ class Quiz(models.Model): return demo_quiz def get_total_students(self, course): + try: + qp = self.questionpaper_set.get().id + except QuestionPaper.DoesNotExist: + qp = None return AnswerPaper.objects.filter( - question_paper=self.questionpaper_set.get().id, + question_paper=qp, course=course ).values_list("user", flat=True).distinct().count() def get_passed_students(self, course): + try: + qp = self.questionpaper_set.get().id + except QuestionPaper.DoesNotExist: + qp = None return AnswerPaper.objects.filter( - question_paper=self.questionpaper_set.get().id, + question_paper=qp, course=course, passed=True ).values_list("user", flat=True).distinct().count() def get_failed_students(self, course): + try: + qp = self.questionpaper_set.get().id + except QuestionPaper.DoesNotExist: + qp = None return AnswerPaper.objects.filter( - question_paper=self.questionpaper_set.get().id, + question_paper=qp, course=course, passed=False ).values_list("user", flat=True).distinct().count() @@ -1165,7 +1176,7 @@ class QuestionPaper(models.Model): return all_questions def make_answerpaper(self, user, ip, attempt_num, course_id): - """Creates an answer paper for the user to attempt the quiz""" + """Creates an answer paper for the user to attempt the quiz""" try: ans_paper = AnswerPaper.objects.get(user=user, attempt_number=attempt_num, @@ -1190,14 +1201,6 @@ class QuestionPaper(models.Model): ans_paper.questions_order = ",".join(question_ids) ans_paper.save() ans_paper.questions_unanswered.add(*questions) - except AnswerPaper.MultipleObjectsReturned: - ans_paper = AnswerPaper.objects.get(user=user, - attempt_number=attempt_num, - question_paper=self, - course_id=course_id - ).order_by('-id') - ans_paper = ans_paper[0] - return ans_paper def _is_attempt_allowed(self, user, course_id): @@ -1212,7 +1215,7 @@ class QuestionPaper(models.Model): user=user, questionpaper=self, course_id=course_id ) if last_attempt: - time_lag = (timezone.now() - last_attempt.start_time).days + time_lag = (timezone.now() - last_attempt.start_time).total_seconds() / 3600 return time_lag >= self.quiz.time_between_attempts else: return True @@ -1507,6 +1510,11 @@ class AnswerPaper(models.Model): objects = AnswerPaperManager() + class Meta: + unique_together = ('user', 'question_paper', + 'attempt_number', "course" + ) + def get_per_question_score(self, question_id): if question_id not in self.get_questions().values_list('id', flat=True): return 'NA' |