diff --git a/longs/admin.py b/longs/admin.py index e340efa4..e95bba2f 100755 --- a/longs/admin.py +++ b/longs/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import Long, LongSeries, LongSeriesImage, Note, LongCreationDefault, Exam +from .models import Long, LongSeries, LongSeriesImage, Note, LongCreationDefault, Exam, CidUserAnswer import tagulous.admin @@ -20,6 +20,7 @@ admin.site.register(Note) admin.site.register(LongCreationDefault) admin.site.register(LongSeries) admin.site.register(LongSeriesImage) +admin.site.register(CidUserAnswer) class LongImageInline(admin.TabularInline): diff --git a/longs/models.py b/longs/models.py index 967356b2..ec9d35af 100644 --- a/longs/models.py +++ b/longs/models.py @@ -143,6 +143,14 @@ class Long(models.Model): ["http://penracourses.org.uk{}".format(i.url) for i in self.GetImages()] ) + def GetUnmarkedAnswerCount(self): + answers = self.cid_user_answers.all() + return len([ans for ans in answers if not ans.is_marked()]) + + def GetUnmarkedAnswers(self): + answers = self.cid_user_answers.all() + return [ans for ans in answers if not ans.is_marked()] + # def GetNonFeedbackQuestionImages(self): # return self.GetImages() @@ -408,7 +416,7 @@ class CidUserAnswer(models.Model): EIGHT = "8", _("8") score = models.CharField( - max_length=3, choices=ScoreOptions.choices, default=ScoreOptions.UNMARKED + max_length=3, choices=ScoreOptions.choices, default=ScoreOptions.UNMARKED, blank=True ) created = models.DateTimeField(auto_now_add=True) @@ -419,8 +427,8 @@ class CidUserAnswer(models.Model): exam = self.exam except (Exam.DoesNotExist, KeyError) as e: exam = "None" - return "{}/{}/{}: {}".format( - exam, self.cid, self.question.GetPrimaryAnswer(), self.answer + return "{}/{}/{} ({})".format( + exam, self.cid, self.created, self.updated ) def save(self, *args, **kwargs): @@ -428,13 +436,10 @@ class CidUserAnswer(models.Model): return super(CidUserAnswer, self).save(*args, **kwargs) def clean(self): - if self.answer: - self.answer = self.answer.strip() + for ans in (self.answer_observations, self.answer_interpretation, self.answer_principle_diagnosis, self.answer_differential_diagnosis, self.answer_management): + if ans: + ans = ans.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) @@ -442,37 +447,11 @@ class CidUserAnswer(models.Model): # s = s.translate(str.maketrans('', '', string.punctuation)) # return s - def get_answer_score(self): - q = self.question - - # First step we check that the normal/abnormal states match - if q.normal != self.normal: - # If they don't match the answer is wrong (score is 0) - return 0 - # If both are normal full marks - elif q.normal and self.normal: - return 2 - - # Then compare answer strings (as per anatomy questions) - ans = self.answer_compare - if ( - q.answers.filter( - answer_compare__iexact=ans, status=Answer.MarkOptions.CORRECT - ).first() - is not None - ): - mark = 2 - elif ( - q.answers.filter( - answer_compare__iexact=ans, status=Answer.MarkOptions.HALF_MARK - ).first() - is not None - ): - mark = 1 - elif q.answers.filter( - answer_compare__iexact=ans, status=Answer.MarkOptions.INCORRECT - ).first(): - mark = 0 + def is_marked(self): + if self.score == "": + return False else: - mark = "unmarked" - return mark + return True + + def get_answer_score(self): + return self.score diff --git a/longs/templates/longs/mark_overview.html b/longs/templates/longs/mark_overview.html index 0ef838a0..3c27e55a 100644 --- a/longs/templates/longs/mark_overview.html +++ b/longs/templates/longs/mark_overview.html @@ -13,7 +13,7 @@