.
This commit is contained in:
+51
-39
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user