start combining answers

This commit is contained in:
Ross
2020-11-06 17:30:07 +00:00
parent 71dc80e9d2
commit bcb289efdd
3 changed files with 109 additions and 72 deletions
+51 -31
View File
@@ -74,10 +74,12 @@ class AnatomyQuestion(models.Model):
examination = models.ForeignKey(Examination,
on_delete=models.SET_NULL,
null=True, blank=True)
null=True,
blank=True)
modality = models.ForeignKey(Modality,
on_delete=models.SET_NULL,
null=True, help_text="Modality of the image")
null=True,
help_text="Modality of the image")
body_part = models.ForeignKey(BodyPart,
on_delete=models.SET_NULL,
null=True,
@@ -107,16 +109,19 @@ class AnatomyQuestion(models.Model):
if not unmarked_answers:
return "No answers to mark"
return format_html("<span class='warn'>{} answer unmarked:</span> {}".format(len(unmarked_answers),
", ".join(unmarked_answers)))
return format_html(
"<span class='warn'>{} answer unmarked:</span> {}".format(
len(unmarked_answers), ", ".join(unmarked_answers)))
def GetUnmarkedAnswers(self):
user_answers = set([i.answer.lower() for i in self.cid_user_answers.all()])
user_answers = set(
[i.get_compare_string() for i in self.cid_user_answers.all()])
unmarked_answers = user_answers - self.GetMarkedAnswers()
return unmarked_answers
def GetMarkedAnswers(self):
return set([i.get_compare_string() for i in self.answers.all() if i.status != i.MarkOptions.UNMARKED])
correct_answers = set([i.answer.lower() for i in self.answers.all()])
half_mark_answers = set(
[i.answer.lower() for i in self.half_mark_answers.all()])
@@ -127,25 +132,19 @@ class AnatomyQuestion(models.Model):
return marked_answers
class Answers(models.Model):
class Answer(models.Model):
question = models.ForeignKey(AnatomyQuestion,
related_name="answers",
on_delete=models.CASCADE)
answer = models.CharField(max_length=500)
def __str__(self):
return self.answer
class MarkOptions(models.TextChoices):
UNMARKED = '', _('Unmarked')
INCORRECT = '0', _('Incorrect')
HALF_MARK = '1', _('Half mark')
CORRECT = '2', _('Correct')
def clean(self):
if self.answer:
self.answer.strip()
class HalfMarkAnswers(models.Model):
question = models.ForeignKey(AnatomyQuestion,
related_name="half_mark_answers",
on_delete=models.CASCADE)
answer = models.CharField(max_length=500)
status = models.CharField(max_length=1, choices=MarkOptions.choices, default=MarkOptions.UNMARKED)
def __str__(self):
return self.answer
@@ -154,19 +153,36 @@ class HalfMarkAnswers(models.Model):
if self.answer:
self.answer.strip()
def get_compare_string(self):
return self.answer.lower()
class IncorrectAnswers(models.Model):
question = models.ForeignKey(AnatomyQuestion,
related_name="incorrect_answers",
on_delete=models.CASCADE)
answer = models.CharField(max_length=500)
def __str__(self):
return self.answer
def clean(self):
if self.answer:
self.answer.strip()
#class HalfMarkAnswers(models.Model):
# question = models.ForeignKey(AnatomyQuestion,
# related_name="half_mark_answers",
# on_delete=models.CASCADE)
# answer = models.CharField(max_length=500)
#
# def __str__(self):
# return self.answer
#
# def clean(self):
# if self.answer:
# self.answer.strip()
#
#
#class IncorrectAnswers(models.Model):
# question = models.ForeignKey(AnatomyQuestion,
# related_name="incorrect_answers",
# on_delete=models.CASCADE)
# answer = models.CharField(max_length=500)
#
# def __str__(self):
# return self.answer
#
# def clean(self):
# if self.answer:
# self.answer.strip()
class Exam(models.Model):
@@ -174,7 +190,8 @@ class Exam(models.Model):
exam_questions = models.ManyToManyField(AnatomyQuestion,
related_name="exams")
active = models.BooleanField(help_text="If an exam should be available", default=True)
active = models.BooleanField(help_text="If an exam should be available",
default=True)
def __str__(self):
return self.name
@@ -183,7 +200,7 @@ class Exam(models.Model):
return self.name
def get_json_url(self):
return reverse('anatomy:exam_json', args=(self.pk,))
return reverse('anatomy:exam_json', args=(self.pk, ))
class UserAnswer(models.Model):
@@ -251,3 +268,6 @@ class CidUserAnswer(models.Model):
def clean(self):
if self.answer:
self.answer.strip()
def get_compare_string(self):
return self.answer.lower()