This commit is contained in:
Ross
2021-12-12 21:41:49 +00:00
parent 7cac4db2c6
commit 9d90b7a045
+48 -36
View File
@@ -17,12 +17,14 @@ import reversion
from django.contrib.contenttypes.fields import GenericRelation from django.contrib.contenttypes.fields import GenericRelation
class Category(models.Model): class Category(models.Model):
category = models.CharField(max_length=200) category = models.CharField(max_length=200)
def __str__(self): def __str__(self):
return self.category return self.category
class Question(models.Model): class Question(models.Model):
stem = models.TextField( stem = models.TextField(
blank=False, blank=False,
@@ -32,50 +34,40 @@ class Question(models.Model):
answer_help_text = "Answer text" answer_help_text = "Answer text"
BEST_ANSWER_CHOICES = ( BEST_ANSWER_CHOICES = (
('a', 'a_answer'), ("a", "a_answer"),
('b', 'b_answer'), ("b", "b_answer"),
('c', 'c_answer'), ("c", "c_answer"),
('d', 'd_answer'), ("d", "d_answer"),
('e', 'e_answer'), ("e", "e_answer"),
) )
# I doubt this is the best way to structure the model # I doubt this is the best way to structure the model
# (but it should work) # (but it should work)
a_answer = models.TextField( a_answer = models.TextField(help_text=answer_help_text)
help_text=answer_help_text
)
a_feedback = models.TextField( a_feedback = models.TextField(
blank=True, blank=True,
help_text="Feedback for answer", help_text="Feedback for answer",
) )
b_answer = models.TextField( b_answer = models.TextField(help_text=answer_help_text)
help_text=answer_help_text
)
b_feedback = models.TextField( b_feedback = models.TextField(
blank=True, blank=True,
help_text="Feedback for answer", help_text="Feedback for answer",
) )
c_answer = models.TextField( c_answer = models.TextField(help_text=answer_help_text)
help_text=answer_help_text
)
c_feedback = models.TextField( c_feedback = models.TextField(
blank=True, blank=True,
help_text="Feedback for answer", help_text="Feedback for answer",
) )
d_answer = models.TextField( d_answer = models.TextField(help_text=answer_help_text)
help_text=answer_help_text
)
d_feedback = models.TextField( d_feedback = models.TextField(
blank=True, blank=True,
help_text="Feedback for answer", help_text="Feedback for answer",
) )
e_answer = models.TextField( e_answer = models.TextField(help_text=answer_help_text)
help_text=answer_help_text
)
e_feedback = models.TextField( e_feedback = models.TextField(
blank=True, blank=True,
help_text="Feedback for answer", help_text="Feedback for answer",
@@ -86,7 +78,9 @@ class Question(models.Model):
help_text="General question feedback", help_text="General question feedback",
) )
best_answer = models.CharField(max_length=20, choices=BEST_ANSWER_CHOICES, help_text="The correct answer") best_answer = models.CharField(
max_length=20, choices=BEST_ANSWER_CHOICES, help_text="The correct answer"
)
created_date = models.DateTimeField(default=timezone.now) created_date = models.DateTimeField(default=timezone.now)
@@ -122,29 +116,38 @@ class Question(models.Model):
return reverse("sbas:question_detail", kwargs={"pk": self.pk}) return reverse("sbas:question_detail", kwargs={"pk": self.pk})
def get_answers(self): def get_answers(self):
return (self.a_answer, self.b_answer, self.c_answer, self.d_answer, self.e_answer) return (
self.a_answer,
self.b_answer,
self.c_answer,
self.d_answer,
self.e_answer,
)
def get_correct_answer(self): def get_correct_answer(self):
if self.best_answer == "a": return self.a_answer if self.best_answer == "a":
if self.best_answer == "b": return self.b_answer return self.a_answer
if self.best_answer == "c": return self.c_answer if self.best_answer == "b":
if self.best_answer == "d": return self.d_answer return self.b_answer
if self.best_answer == "e": return self.e_answer if self.best_answer == "c":
return self.c_answer
if self.best_answer == "d":
return self.d_answer
if self.best_answer == "e":
return self.e_answer
def get_correct_answer_stripped(self): def get_correct_answer_stripped(self):
return self.get_correct_answer().replace("<p>","",1).replace("</p>","",1) return self.get_correct_answer().replace("<p>", "", 1).replace("</p>", "", 1)
def get_stem_stripped(self): def get_stem_stripped(self):
return self.stem.replace("<p>","",1).replace("</p>","",1) return self.stem.replace("<p>", "", 1).replace("</p>", "", 1)
@reversion.register @reversion.register
class Exam(ExamBase): class Exam(ExamBase):
app_name = "sbas" app_name = "sbas"
exam_questions = SortedManyToManyField( exam_questions = SortedManyToManyField(Question, related_name="exams", blank="true")
Question, related_name="exams", blank="true"
)
time_limit = models.IntegerField( time_limit = models.IntegerField(
help_text="Exam time limit (in seconds)", help_text="Exam time limit (in seconds)",
@@ -154,13 +157,18 @@ class Exam(ExamBase):
recreate_json = None recreate_json = None
author = models.ManyToManyField(settings.AUTH_USER_MODEL, author = models.ManyToManyField(
settings.AUTH_USER_MODEL,
blank=True, blank=True,
help_text='Author of exam', help_text="Author of exam",
related_name="sba_exam_author") related_name="sba_exam_author",
)
valid_users = models.ManyToManyField(CidUser, blank=True, related_name="sba_exams") valid_users = models.ManyToManyField(CidUser, blank=True, related_name="sba_exams")
def get_take_url(self):
return reverse("physics:exam_start", kwargs={"pk": self.pk})
@reversion.register @reversion.register
class CidUserAnswer(models.Model): class CidUserAnswer(models.Model):
@@ -169,7 +177,11 @@ class CidUserAnswer(models.Model):
question = models.ForeignKey( question = models.ForeignKey(
Question, related_name="cid_user_answers", on_delete=models.CASCADE Question, related_name="cid_user_answers", on_delete=models.CASCADE
) )
answer = models.CharField(max_length=20, choices=Question.BEST_ANSWER_CHOICES, help_text="The correct answer") answer = models.CharField(
max_length=20,
choices=Question.BEST_ANSWER_CHOICES,
help_text="The correct answer",
)
cid = models.IntegerField(blank=True, null=True) cid = models.IntegerField(blank=True, null=True)