From d1be8fd8759695d3fac7e721d24df25991fd962a Mon Sep 17 00:00:00 2001 From: Ross Date: Tue, 12 Jan 2021 17:23:19 +0000 Subject: [PATCH] rewrite compare --- anatomy/models.py | 95 ++++++++++++-------- anatomy/views.py | 4 +- physics/templates/physics/exam_overview.html | 2 +- physics/templates/physics/exam_scores.html | 1 + 4 files changed, 61 insertions(+), 41 deletions(-) diff --git a/anatomy/models.py b/anatomy/models.py index 8b14ca2e..4eef4e2f 100644 --- a/anatomy/models.py +++ b/anatomy/models.py @@ -11,6 +11,8 @@ from django.utils.translation import ugettext_lazy as _ from sortedm2m.fields import SortedManyToManyField +import string + image_storage = FileSystemStorage( # Physical file location ROOT location=u"{0}/anatomy/".format(settings.MEDIA_ROOT), @@ -164,7 +166,7 @@ class AnatomyQuestion(models.Model): def GetUnmarkedAnswers(self): user_answers = set( - [i.get_compare_string() for i in self.cid_user_answers.all()] + [i.answer_compare for i in self.cid_user_answers.all()] ) unmarked_answers = user_answers - self.GetMarkedAnswers() @@ -176,7 +178,7 @@ class AnatomyQuestion(models.Model): def GetMarkedAnswers(self): return set( [ - i.get_compare_string() + i.answer_compare for i in self.answers.all() if i.status != i.MarkOptions.UNMARKED ] @@ -200,6 +202,7 @@ class Answer(models.Model): AnatomyQuestion, related_name="answers", on_delete=models.CASCADE ) answer = models.TextField(max_length=500) + answer_compare = models.TextField(max_length=500) class MarkOptions(models.TextChoices): UNMARKED = "", _("Unmarked") @@ -218,8 +221,15 @@ class Answer(models.Model): if self.answer: self.answer = self.answer.strip() - def get_compare_string(self): - return self.answer.lower().strip() + s = self.answer.lower() + s = s.translate(str.maketrans('', '', string.punctuation)) + + self.answer_compare = s + + # def get_compare_string(self): + # s = self.answer.lower().strip() + # s = s.translate(str.maketrans('', '', string.punctuation)) + # return s # class HalfMarkAnswers(models.Model): @@ -288,39 +298,39 @@ class Exam(models.Model): return list(self.exam_questions.all()).index(question) -class UserAnswer(models.Model): - question = models.ForeignKey( - AnatomyQuestion, related_name="user_answers", on_delete=models.CASCADE - ) - answer = models.TextField(max_length=500, blank=True) - user = models.ForeignKey( - settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.SET_NULL - ) +# class UserAnswer(models.Model): +# question = models.ForeignKey( +# AnatomyQuestion, related_name="user_answers", on_delete=models.CASCADE +# ) +# answer = models.TextField(max_length=500, blank=True) +# user = models.ForeignKey( +# settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.SET_NULL +# ) - cid = models.BigIntegerField(blank=True, null=True, help_text="Candidate ID (limitied by BigIntegerField size)") +# cid = models.BigIntegerField(blank=True, null=True, help_text="Candidate ID (limitied by BigIntegerField size)") - # Each user answer is associated with a particular exam - exam = models.ForeignKey( - Exam, related_name="exam", on_delete=models.CASCADE, null=True - ) +# # Each user answer is associated with a particular exam +# exam = models.ForeignKey( +# Exam, related_name="exam", on_delete=models.CASCADE, null=True +# ) - flagged = models.BooleanField(default=False) +# flagged = models.BooleanField(default=False) - created = models.DateTimeField(auto_now_add=True) - updated = models.DateTimeField(auto_now=True) +# created = models.DateTimeField(auto_now_add=True) +# updated = models.DateTimeField(auto_now=True) - def __str__(self): - try: - exam = self.exam - except (Exam.DoesNotExist, KeyError) as e: - exam = "None" - return "{}/{}/{}: {}".format( - exam, self.cid, self.question.GetPrimaryAnswer(), self.answer - ) +# def __str__(self): +# try: +# exam = self.exam +# except (Exam.DoesNotExist, KeyError) as e: +# exam = "None" +# return "{}/{}/{}: {}".format( +# exam, self.cid, self.question.GetPrimaryAnswer(), self.answer +# ) - def clean(self): - if self.answer: - self.answer = self.answer.strip() +# def clean(self): +# if self.answer: +# self.answer = self.answer.strip() class CidUserAnswer(models.Model): @@ -331,6 +341,8 @@ class CidUserAnswer(models.Model): ) answer = models.TextField(max_length=500, blank=True) + answer_compare = models.TextField(max_length=500, blank=True) + cid = models.BigIntegerField(blank=True, null=True, help_text="Candidate ID (limitied by BigIntegerField size)") # Each user answer is associated with a particular exam @@ -354,29 +366,36 @@ class CidUserAnswer(models.Model): if self.answer: self.answer = self.answer.strip() - def get_compare_string(self): - # strip here should be unneccasry (providing clean is now working) - return self.answer.lower().strip() + s = self.answer.lower() + s = s.translate(str.maketrans('', '', string.punctuation)) + + self.answer_compare = s + + # def get_compare_string(self): + # # strip here should be unneccasry (providing clean is now working) + # s = self.answer.lower().strip() + # s = s.translate(str.maketrans('', '', string.punctuation)) + # return s def get_answer_score(self): q = self.question - ans = self.answer + ans = self.answer_compare if ( q.answers.filter( - answer__iexact=ans, status=Answer.MarkOptions.CORRECT + answer_compare__iexact=ans, status=Answer.MarkOptions.CORRECT ).first() is not None ): mark = 2 elif ( q.answers.filter( - answer__iexact=ans, status=Answer.MarkOptions.HALF_MARK + answer_compare__iexact=ans, status=Answer.MarkOptions.HALF_MARK ).first() is not None ): mark = 1 elif q.answers.filter( - answer__iexact=ans, status=Answer.MarkOptions.INCORRECT + answer_compare__iexact=ans, status=Answer.MarkOptions.INCORRECT ).first(): mark = 0 else: diff --git a/anatomy/views.py b/anatomy/views.py index 02353101..504196a0 100644 --- a/anatomy/views.py +++ b/anatomy/views.py @@ -32,7 +32,7 @@ from .forms import ( AnatomyQuestionForm, StructureForm, ) -from .models import ( +# from .models import ( AnatomyQuestion, BodyPart, CidUserAnswer, @@ -401,7 +401,7 @@ def mark(request, pk, sk): answers_dict = {} for ans in question.answers.all(): - answers_dict[ans.get_compare_string()] = ans + answers_dict[ans.answer_compare] = ans marked_answers_set = set(answers_dict.keys()) diff --git a/physics/templates/physics/exam_overview.html b/physics/templates/physics/exam_overview.html index 7cc22d11..d32e5c65 100644 --- a/physics/templates/physics/exam_overview.html +++ b/physics/templates/physics/exam_overview.html @@ -14,7 +14,7 @@ Publish results: [When checked the exam results will be available on this site] - This exam will be available to take here. + This exam will be available to take here (when active). {% autoescape off %}
    diff --git a/physics/templates/physics/exam_scores.html b/physics/templates/physics/exam_scores.html index 72a7066b..c1e712c2 100644 --- a/physics/templates/physics/exam_scores.html +++ b/physics/templates/physics/exam_scores.html @@ -7,6 +7,7 @@

    Stats

    + Candidates: {{cids|length}}
    Max score: {{max_score}}
    Mean: {{mean}}, Median {{median}}, Mode {{mode}}