start combining answers
This commit is contained in:
+51
-31
@@ -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()
|
||||
Reference in New Issue
Block a user