From 25b9adaaa285d259e9146512175d526236829caf Mon Sep 17 00:00:00 2001 From: =?utf8?q?=D0=A0=D1=83=D1=81=D1=82=D0=B0=D0=BC=20=D0=9A=D0=B0=D1=88?= =?utf8?q?=D0=B0=D0=BF=D0=BE=D0=B2?= Date: Thu, 2 Oct 2014 09:10:55 +0400 Subject: [PATCH] some code improvements --- quiz/models.py | 38 +++++++++++++++++--------------------- quiz/views.py | 2 ++ 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/quiz/models.py b/quiz/models.py index 13898db..b3592b0 100644 --- a/quiz/models.py +++ b/quiz/models.py @@ -280,8 +280,7 @@ class Progress(models.Model): Finds the previous quizzes marked as 'exam papers'. Returns a queryset of complete exams. """ - return Sitting.objects.filter(user=self.user) \ - .filter(complete=True) + return Sitting.objects.filter(user=self.user, complete=True) class SittingManager(models.Manager): @@ -295,12 +294,11 @@ class SittingManager(models.Manager): question_set = quiz.question_set.all() \ .select_subclasses() + question_set = question_set.values_list('id', flat=True) if quiz.max_questions and quiz.max_questions < len(question_set): question_set = question_set[:quiz.max_questions] - questions = "" - for question in question_set: - questions += str(question.id) + "," + questions = ",".join(map(str, question_set)) + "," new_sitting = self.create(user=user, quiz=quiz, @@ -310,14 +308,13 @@ class SittingManager(models.Manager): current_score=0, complete=False, user_answers='{}') - new_sitting.save() return new_sitting def user_sitting(self, user, quiz): if quiz.single_attempt is True and self.filter(user=user, quiz=quiz, complete=True)\ - .count() > 0: + .exists(): return False try: @@ -326,8 +323,7 @@ class SittingManager(models.Manager): sitting = self.new_sitting(user, quiz) except Sitting.MultipleObjectsReturned: sitting = self.filter(user=user, quiz=quiz, complete=False)[0] - finally: - return sitting + return sitting class Sitting(models.Model): @@ -381,17 +377,20 @@ class Sitting(models.Model): If no question is found, returns False Does NOT remove the question from the front of the list. """ - first_comma = self.question_list.find(',') - if first_comma == -1 or first_comma == 0: + if not self.question_list: return False - question_id = int(self.question_list[:first_comma]) + + first, _ = self.question_list.split(',', 1) + question_id = int(first) return Question.objects.get_subclass(id=question_id) def remove_first_question(self): - first_comma = self.question_list.find(',') - if first_comma != -1 or first_comma != 0: - self.question_list = self.question_list[first_comma + 1:] - self.save() + if not self.question_list: + return + + _, others = self.question_list.split(',', 1) + self.question_list = others + self.save() def add_to_score(self, points): self.current_score += int(points) @@ -455,10 +454,7 @@ class Sitting(models.Model): @property def check_if_passed(self): - if self.get_percent_correct >= self.quiz.pass_mark: - return True - else: - return False + return self.get_percent_correct >= self.quiz.pass_mark @property def result_message(self): @@ -504,7 +500,7 @@ class Sitting(models.Model): """ answered = len(json.loads(self.user_answers)) total = self.get_max_score - return (answered, total) + return answered, total class Question(models.Model): diff --git a/quiz/views.py b/quiz/views.py index be2c03c..aac3d71 100644 --- a/quiz/views.py +++ b/quiz/views.py @@ -35,6 +35,7 @@ class QuizListView(ListView): queryset = super(QuizListView, self).get_queryset() return queryset.filter(draft=False) + class QuizDetailView(DetailView): model = Quiz slug_field = 'url' @@ -48,6 +49,7 @@ class QuizDetailView(DetailView): context = self.get_context_data(object=self.object) return self.render_to_response(context) + class CategoriesListView(ListView): model = Category -- 2.39.5