This commit is contained in:
Ross
2021-02-16 12:45:19 +00:00
parent 1e8697e6bb
commit a0b9e92aba
4 changed files with 47 additions and 60 deletions
+2 -1
View File
@@ -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):
+21 -42
View File
@@ -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
+1 -1
View File
@@ -13,7 +13,7 @@
<ul id="question-mark-list">
{% for question in questions.all %}
<li data-markcount={{question.GetUnmarkedAnswerCount}}><a href="{% url 'longs:mark' pk=exam.pk sk=forloop.counter0 %}">Question {{forloop.counter }}:
{{ question }}</a><br /> {{ question.GetUnmarkedAnswersString }}</li>
{{ question }}</a><br /> Answers to mark: {{question.GetUnmarkedAnswerCount}}</li>
{% endfor %}
</ul>
</div>
+23 -16
View File
@@ -618,33 +618,40 @@ def loadJsonAnswer(answer):
)
posted_answer = answer["ans"]
# Normal answers are just posted with the answer "Normal"
normal = False
if posted_answer == "Normal":
normal = True
posted_answer = ""
# We can ignore the first ab
elif answer["qidn"] == "1" and posted_answer == "Abnormal":
return False
# Long cases seperate sections by qidn
qidn = answer["qidn"]
# If the user answer does not exist
if not exiting_answers:
ans = CidUserAnswer(answer=posted_answer, normal=normal, cid=answer["cid"])
ans = CidUserAnswer(cid=answer["cid"])
ans.question_id = answer["qid"]
ans.exam_id = eid
ans.full_clean()
ans.save()
# If the answer already exists or we have started populating it
else:
# Update an existing answer
# should never be more than one (famous last words)
ans = exiting_answers[0]
ans.normal = normal
ans.answer = posted_answer
ans.full_clean()
ans.save()
if qidn == "1":
ans.answer_observations = posted_answer
elif qidn == "2":
ans.answer_interpretation = posted_answer
elif qidn == "3":
ans.answer_principle_diagnosis = posted_answer
elif qidn == "4":
ans.answer_differential_diagnosis = posted_answer
elif qidn == "5":
ans.answer_management = posted_answer
# Mark as unmarked
ans.score = ans.ScoreOptions.UNMARKED
ans.full_clean()
ans.save()
return True