This commit is contained in:
Ross
2021-12-12 21:41:49 +00:00
parent 7cac4db2c6
commit 9d90b7a045
+51 -39
View File
@@ -17,12 +17,14 @@ import reversion
from django.contrib.contenttypes.fields import GenericRelation
class Category(models.Model):
category = models.CharField(max_length=200)
def __str__(self):
return self.category
class Question(models.Model):
stem = models.TextField(
blank=False,
@@ -32,50 +34,40 @@ class Question(models.Model):
answer_help_text = "Answer text"
BEST_ANSWER_CHOICES = (
('a', 'a_answer'),
('b', 'b_answer'),
('c', 'c_answer'),
('d', 'd_answer'),
('e', 'e_answer'),
("a", "a_answer"),
("b", "b_answer"),
("c", "c_answer"),
("d", "d_answer"),
("e", "e_answer"),
)
# I doubt this is the best way to structure the model
# (but it should work)
a_answer = models.TextField(
help_text=answer_help_text
)
a_answer = models.TextField(help_text=answer_help_text)
a_feedback = models.TextField(
blank=True,
help_text="Feedback for answer",
)
b_answer = models.TextField(
help_text=answer_help_text
)
b_answer = models.TextField(help_text=answer_help_text)
b_feedback = models.TextField(
blank=True,
help_text="Feedback for answer",
)
c_answer = models.TextField(
help_text=answer_help_text
)
c_answer = models.TextField(help_text=answer_help_text)
c_feedback = models.TextField(
blank=True,
help_text="Feedback for answer",
)
d_answer = models.TextField(
help_text=answer_help_text
)
d_answer = models.TextField(help_text=answer_help_text)
d_feedback = models.TextField(
blank=True,
help_text="Feedback for answer",
)
e_answer = models.TextField(
help_text=answer_help_text
)
e_answer = models.TextField(help_text=answer_help_text)
e_feedback = models.TextField(
blank=True,
help_text="Feedback for answer",
@@ -86,7 +78,9 @@ class Question(models.Model):
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)
@@ -122,29 +116,38 @@ class Question(models.Model):
return reverse("sbas:question_detail", kwargs={"pk": self.pk})
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):
if self.best_answer == "a": return self.a_answer
if self.best_answer == "b": return self.b_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
if self.best_answer == "a":
return self.a_answer
if self.best_answer == "b":
return self.b_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):
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):
return self.stem.replace("<p>","",1).replace("</p>","",1)
return self.stem.replace("<p>", "", 1).replace("</p>", "", 1)
@reversion.register
class Exam(ExamBase):
app_name = "sbas"
exam_questions = SortedManyToManyField(
Question, related_name="exams", blank="true"
)
exam_questions = SortedManyToManyField(Question, related_name="exams", blank="true")
time_limit = models.IntegerField(
help_text="Exam time limit (in seconds)",
@@ -154,13 +157,18 @@ class Exam(ExamBase):
recreate_json = None
author = models.ManyToManyField(settings.AUTH_USER_MODEL,
blank=True,
help_text='Author of exam',
related_name="sba_exam_author")
author = models.ManyToManyField(
settings.AUTH_USER_MODEL,
blank=True,
help_text="Author of exam",
related_name="sba_exam_author",
)
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
class CidUserAnswer(models.Model):
@@ -169,7 +177,11 @@ class CidUserAnswer(models.Model):
question = models.ForeignKey(
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)
@@ -193,4 +205,4 @@ class CidUserAnswer(models.Model):
def get_score(self):
if self.get_correct():
return 1
return 0
return 0