diff --git a/anatomy/models.py b/anatomy/models.py index 75bb7bc7..f9bc4b56 100644 --- a/anatomy/models.py +++ b/anatomy/models.py @@ -469,6 +469,7 @@ class Exam(ExamBase): @reversion.register class UserAnswer(UserAnswerBase): """User answers by candidate""" + app_name = "anatomy" question = models.ForeignKey( AnatomyQuestion, related_name="cid_user_answers", on_delete=models.CASCADE @@ -515,9 +516,6 @@ class UserAnswer(UserAnswerBase): self.answer_compare = s - def get_absolute_url(self): - return reverse("anatomy:user_answer_view", kwargs={"pk": self.pk}) - # def get_compare_string(self): # # strip here should be unneccasry (providing clean is now working) # s = self.answer.lower().strip() diff --git a/generic/models.py b/generic/models.py index b8a98b8b..1cf4611d 100644 --- a/generic/models.py +++ b/generic/models.py @@ -410,6 +410,11 @@ class UserAnswerBase(models.Model): abstract = True ordering = ["cid"] + + def __str__(self) -> str: + return "{}/{}/{}".format(self.get_candidate_name(), self.exam, self.question.pk) + + def get_candidate_name(self) -> str: if self.cid is not None: return str(self.cid) @@ -422,6 +427,9 @@ class UserAnswerBase(models.Model): else: return str(self.user.id) + def get_absolute_url(self): + return reverse(f"{self.app_name}:user_answer_view", kwargs={"pk": self.pk}) + class NoteType(models.Model): note_type = models.CharField(max_length=200) diff --git a/longs/models.py b/longs/models.py index 51a865b4..72f6a8f6 100644 --- a/longs/models.py +++ b/longs/models.py @@ -755,6 +755,7 @@ class Exam(ExamBase): @reversion.register class UserAnswer(UserAnswerBase): """User answers by candidate""" + app_name = "longs" question = models.ForeignKey( Long, related_name="cid_user_answers", on_delete=models.CASCADE @@ -813,8 +814,6 @@ class UserAnswer(UserAnswerBase): # "AnswerMarks", related_name="user_answer", on_delete=models.SET_NULL, null=True, blank=True # ) - - def __str__(self): try: exam = self.exam @@ -879,8 +878,6 @@ class UserAnswer(UserAnswerBase): return True return False - def get_absolute_url(self): - return reverse("longs:user_answer_view", kwargs={"pk": self.pk}) diff --git a/physics/models.py b/physics/models.py index d845fbf0..6b3fcb9c 100644 --- a/physics/models.py +++ b/physics/models.py @@ -184,6 +184,7 @@ class Exam(ExamBase): @reversion.register class UserAnswer(UserAnswerBase): """User answers by candidate""" + app_name = "physics" question = models.ForeignKey( Question, related_name="cid_user_answers", on_delete=models.CASCADE @@ -207,10 +208,6 @@ class UserAnswer(UserAnswerBase): Exam, related_name="cid_user_answers", on_delete=models.CASCADE, null=True ) - - def __str__(self): - return "{}/{}/{}".format(self.cid, self.exam, self.question.pk) - def get_answers(self): return (self.a, self.b, self.c, self.d, self.e) diff --git a/rapids/models.py b/rapids/models.py index ccaea215..03a3feb7 100644 --- a/rapids/models.py +++ b/rapids/models.py @@ -771,6 +771,7 @@ class Exam(ExamBase): @reversion.register class UserAnswer(UserAnswerBase): """User answers by candidate""" + app_name = "rapids" question = models.ForeignKey( Rapid, related_name="cid_user_answers", on_delete=models.CASCADE @@ -816,9 +817,7 @@ class UserAnswer(UserAnswerBase): def __str__(self): - name = self.cid - if self.user is not None: - name = self.user.username + name = self.get_candidate_name() try: exam = self.exam @@ -859,9 +858,6 @@ class UserAnswer(UserAnswerBase): else: return self.answer - def get_absolute_url(self): - return reverse("rapids:user_answer_view", kwargs={"pk": self.pk}) - def get_answer_callstate(self): if not self.callstate: return "" diff --git a/sbas/models.py b/sbas/models.py index 1463a79a..c6019d82 100644 --- a/sbas/models.py +++ b/sbas/models.py @@ -207,6 +207,7 @@ class Exam(ExamBase): @reversion.register class UserAnswer(UserAnswerBase): """User answers by candidate""" + app_name = "sbas" question = models.ForeignKey( Question, related_name="cid_user_answers", on_delete=models.CASCADE @@ -230,9 +231,6 @@ class UserAnswer(UserAnswerBase): Exam, related_name="cid_user_answers", on_delete=models.CASCADE, null=True ) - def __str__(self): - return "{}/{}/{}".format(self.cid, self.exam, self.question.pk) - def get_answer_string(self): return self.answer