From 8340621ce90071c9c2111a461772aee78338f67a Mon Sep 17 00:00:00 2001 From: tkupek Date: Wed, 17 Feb 2016 23:58:07 +0100 Subject: [PATCH] added correct field to user_answer, revert utf8 fix utf8 does not seem to make troubles on windows, testing this on linux --- tkupek_elearning/elearning/models.py | 12 ++++---- .../elearning/templates/statistic.html | 4 +++ tkupek_elearning/elearning/views.py | 30 ++++++++++++++----- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/tkupek_elearning/elearning/models.py b/tkupek_elearning/elearning/models.py index d8625f7..fd509c0 100644 --- a/tkupek_elearning/elearning/models.py +++ b/tkupek_elearning/elearning/models.py @@ -16,7 +16,7 @@ class Setting(models.Model): logo = models.CharField(max_length=256, null=True) active = models.BooleanField(unique=True, default=False) - def __unicode__(self): + def __str__(self): return self.title @@ -26,17 +26,16 @@ class Question(models.Model): text = models.TextField(null=True) explanation = models.TextField(null=True) - def __unicode__(self): + def __str__(self): return self.title - class Option(models.Model): text = models.CharField(max_length=100, null=True) correct = models.BooleanField(null=False, default=False) question = models.ForeignKey(Question, on_delete=models.CASCADE, null=False) - def __unicode__(self): + def __str__(self): return self.text @@ -50,15 +49,16 @@ class User(models.Model): name = models.CharField(max_length=100, null=False) last_seen = models.DateTimeField(null=True) - def __unicode__(self): + def __str__(self): return self.name class UserAnswer(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE, null=False) question = models.ForeignKey(Question, on_delete=models.CASCADE, null=False) + correct = models.NullBooleanField(null=True) - def __unicode__(self): + def __str__(self): return str(self.user) + " - " + str(self.question) class Meta: diff --git a/tkupek_elearning/elearning/templates/statistic.html b/tkupek_elearning/elearning/templates/statistic.html index ff00014..4efa1f9 100644 --- a/tkupek_elearning/elearning/templates/statistic.html +++ b/tkupek_elearning/elearning/templates/statistic.html @@ -42,11 +42,15 @@ title answers + correct + correct percentage {% for question in questions %} {{ question.title }} {{ question.answers }} + {{ question.correct_answers }} + {{ question.correct_answers_percentage }} {% endfor %} diff --git a/tkupek_elearning/elearning/views.py b/tkupek_elearning/elearning/views.py index 72a4c89..ce5580b 100644 --- a/tkupek_elearning/elearning/views.py +++ b/tkupek_elearning/elearning/views.py @@ -60,12 +60,33 @@ def get_answer(request): user = User.objects.get(token=request_token) log_last_seen(user) + correct_options = Option.objects.filter(question=question.id, correct=True) + correct_option_checklist = [] + for option in correct_options: + correct_option_checklist.append(option.id) + + options_id = [] + for option in correct_options: + options_id.append(option.id) + options_id = json.dumps(options_id) + user_answer = get_user_answer(question, user) if user_answer is None: + correct = False + user_answer = UserAnswer() user_answer.question = question user_answer.user = user + + for option in request_answers: + if option in correct_option_checklist: + correct_option_checklist.remove(option) + + if len(correct_option_checklist) is 0: + correct = True + + user_answer.correct = correct user_answer.save() for option in request_answers: @@ -74,13 +95,6 @@ def get_answer(request): user_answer_options.option = Option.objects.get(id=option) user_answer_options.save() - options = Option.objects.filter(question=question.id, correct=True) - - options_id = [] - for option in options: - options_id.append(option.id) - options_id = json.dumps(options_id) - return HttpResponse(options_id) @@ -109,5 +123,7 @@ def statistic(request): questions = Question.objects.all() for question in questions: question.answers = UserAnswer.objects.filter(question=question.id).count() + question.correct_answers = UserAnswer.objects.filter(question=question.id, correct=True).count() + question.correct_answers_percentage = question.correct_answers / question.answers return render_to_response('statistic.html', {'settings': settings, 'users': users, 'questions': questions})