diff --git a/anatomy/filters.py b/anatomy/filters.py index 8358550f..b5995911 100644 --- a/anatomy/filters.py +++ b/anatomy/filters.py @@ -1,6 +1,22 @@ import django_filters -from .models import AnatomyQuestion +from .models import AnatomyQuestion, CidUserAnswer + +#from generic.filters import UserAnswerFilter + + +class AnatomyUserAnswerFilter(django_filters.FilterSet): + class Meta: + model= CidUserAnswer + fields = ( + "cid", + "question", + "answer", + #"answer_compare", + "exam", + "created", + "updated", + ) class AnatomyQuestionFilter(django_filters.FilterSet): diff --git a/anatomy/models.py b/anatomy/models.py index cc3f74c0..4dc61b51 100644 --- a/anatomy/models.py +++ b/anatomy/models.py @@ -310,41 +310,6 @@ class Exam(ExamBase): return exam_json -# class UserAnswer(models.Model): -# question = models.ForeignKey( -# AnatomyQuestion, related_name="user_answers", on_delete=models.CASCADE -# ) -# answer = models.TextField(max_length=500, blank=True) -# user = models.ForeignKey( -# settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.SET_NULL -# ) - -# cid = models.BigIntegerField(blank=True, null=True, help_text="Candidate ID (limitied by BigIntegerField size)") - -# # Each user answer is associated with a particular exam -# exam = models.ForeignKey( -# Exam, related_name="exam", on_delete=models.CASCADE, null=True -# ) - -# flagged = models.BooleanField(default=False) - -# created = models.DateTimeField(auto_now_add=True) -# updated = models.DateTimeField(auto_now=True) - -# def __str__(self): -# try: -# exam = self.exam -# except (Exam.DoesNotExist, KeyError) as e: -# exam = "None" -# return "{}/{}/{}: {}".format( -# exam, self.cid, self.question.GetPrimaryAnswer(), self.answer -# ) - -# def clean(self): -# if self.answer: -# self.answer = self.answer.strip() - - class CidUserAnswer(models.Model): """User answers by candidate""" diff --git a/anatomy/tables.py b/anatomy/tables.py index c3994922..20255f6c 100644 --- a/anatomy/tables.py +++ b/anatomy/tables.py @@ -1,7 +1,7 @@ import django_tables2 as tables from django_tables2.utils import A -from .models import AnatomyQuestion +from .models import AnatomyQuestion, CidUserAnswer from django.utils.html import format_html @@ -9,6 +9,23 @@ from easy_thumbnails.files import get_thumbnailer from easy_thumbnails.exceptions import InvalidImageFormatError +#from generic.tables import UserAnswerTable + + +class AnatomyUserAnswerTable(tables.Table): + class Meta: + model = CidUserAnswer + template_name = "django_tables2/bootstrap4.html" + fields = ( + "cid", + "question", + "answer", + #"answer_compare", + "exam", + "created", + "updated", + ) + class ImageColumn(tables.Column): def render(self, value): diff --git a/anatomy/urls.py b/anatomy/urls.py index 0c4202fc..1827e0e0 100644 --- a/anatomy/urls.py +++ b/anatomy/urls.py @@ -51,4 +51,5 @@ urlpatterns = [ path("examination/ajax/get_examination_id", views.get_examination_id, name="get_examination_id"), + path("user_answers/", views.AnatomyUserAnswerView.as_view(), name="anatomy_user_answer_view"), ] diff --git a/anatomy/views.py b/anatomy/views.py index f83dbfc9..f2f0f9c4 100644 --- a/anatomy/views.py +++ b/anatomy/views.py @@ -46,8 +46,8 @@ from .models import ( from generic.models import Examination from generic.views import ExamViews -from .tables import AnatomyQuestionTable -from .filters import AnatomyQuestionFilter +from .tables import AnatomyQuestionTable, AnatomyUserAnswerTable +from .filters import AnatomyQuestionFilter, AnatomyUserAnswerFilter from django_tables2 import SingleTableView, SingleTableMixin from django_filters.views import FilterView @@ -919,6 +919,13 @@ class AnatomyQuestionView(SingleTableMixin, FilterView): filterset_class = AnatomyQuestionFilter +class AnatomyUserAnswerView(SingleTableMixin, FilterView): + model = CidUserAnswer + table_class = AnatomyUserAnswerTable + template_name = "anatomy/anatomy_question_view.html" + + filterset_class = AnatomyUserAnswerFilter + def question_save_annotation(request, pk): if request.is_ajax() and request.method == "POST": diff --git a/generic/filters.py b/generic/filters.py new file mode 100644 index 00000000..3eddff2e --- /dev/null +++ b/generic/filters.py @@ -0,0 +1,18 @@ +import django_filters + + + +#class UserAnswerFilter(django_filters.FilterSet): +# class Meta: +# #model = AnatomyQuestion +# abstract = True +# fields = ( +# "cid", +# "question", +# "answer", +# #"answer_compare", +# "exam", +# "created", +# "updateded", +# "created_date", +# ) \ No newline at end of file diff --git a/generic/tables.py b/generic/tables.py new file mode 100644 index 00000000..e87ae678 --- /dev/null +++ b/generic/tables.py @@ -0,0 +1,47 @@ +import django_tables2 as tables +from django_tables2.utils import A + +from django.utils.html import format_html + +from easy_thumbnails.files import get_thumbnailer + +from easy_thumbnails.exceptions import InvalidImageFormatError + + +class ImageColumn(tables.Column): + def render(self, value): + try: + thumbnailer = get_thumbnailer(value) + return format_html('', thumbnailer["exam-list"]) + except InvalidImageFormatError: + return format_html('Invalid image url', value) + + +#class UserAnswerTable(tables.Table): +# #edit = tables.LinkColumn( +# # "anatomy:anatomy_question_update", text="Edit", args=[A("pk")], orderable=False +# #) +# #view = tables.LinkColumn( +# # "anatomy:question_detail", text="View", args=[A("pk")], orderable=False +# #) +# #image = ImageColumn("image", orderable=False) +# # clone = tables.LinkColumn('anatomy:anatomy_question_clone', +# # text='Clone', +# # args=[A('pk')], +# # orderable=False) +# #exams = tables.ManyToManyColumn(verbose_name="Exams") +# +# class Meta: +# #model = AnatomyQuestion +# abstract = True +# template_name = "django_tables2/bootstrap4.html" +# fields = ( +# "cid", +# "question", +# "answer", +# #"answer_compare", +# "exam", +# "created", +# "updated", +# ) +# #sequence = ("view") \ No newline at end of file