From 9d3957226dd5ae0a62235bd83069bb4ccb84fcea Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 19 Oct 2020 17:05:59 +0100 Subject: [PATCH] many improvement --- .gitignore | 2 ++ anatomy/admin.py | 4 +-- anatomy/forms.py | 4 +-- anatomy/models.py | 13 +++++----- anatomy/static/css/anatomy.css | 4 +++ anatomy/templates/anatomy/base.html | 1 + anatomy/templates/anatomy/exam_list.html | 26 +++++++++++++++++--- anatomy/templates/anatomy/exam_overview.html | 14 ++++++++--- anatomy/templates/anatomy/exam_scores.html | 7 +----- anatomy/templates/anatomy/exams.html | 6 +++++ anatomy/templates/anatomy/mark.html | 6 +---- anatomy/templates/anatomy/mark_overview.html | 10 +++----- anatomy/urls.py | 2 +- anatomy/views.py | 26 ++++++++++++++------ rad/settings.py | 6 ++--- 15 files changed, 85 insertions(+), 46 deletions(-) create mode 100644 anatomy/templates/anatomy/exams.html diff --git a/.gitignore b/.gitignore index 0d5520ce..0d82eaa8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ media/ +static/ + __pycache__ .vscode/ \ No newline at end of file diff --git a/anatomy/admin.py b/anatomy/admin.py index ec08fc57..42435a49 100644 --- a/anatomy/admin.py +++ b/anatomy/admin.py @@ -6,7 +6,7 @@ from .models import ( Answers, HalfMarkAnswers, IncorrectAnswers, - UserAnswer, + CidUserAnswer, Exam, Modality, BodyPart, @@ -48,7 +48,7 @@ class AnatomyAdmin(VersionAdmin): admin.site.register(AnatomyQuestion, AnatomyAdmin) admin.site.register(Examination) admin.site.register(QuestionType) -admin.site.register(UserAnswer) +admin.site.register(CidUserAnswer) admin.site.register(Exam) admin.site.register(Modality) admin.site.register(BodyPart) diff --git a/anatomy/forms.py b/anatomy/forms.py index 3c0a03e2..100d6834 100644 --- a/anatomy/forms.py +++ b/anatomy/forms.py @@ -1,11 +1,11 @@ from django import forms -from .models import UserAnswer, AnatomyQuestion +from .models import CidUserAnswer, AnatomyQuestion class AnatomyAnswerForm(forms.ModelForm): class Meta: - model = UserAnswer + model = CidUserAnswer fields = ("answer",) diff --git a/anatomy/models.py b/anatomy/models.py index c6366246..1713a306 100644 --- a/anatomy/models.py +++ b/anatomy/models.py @@ -3,6 +3,7 @@ from django.utils import timezone from django.core.files.storage import FileSystemStorage from django.conf import settings +from django.utils.html import format_html from django.urls import reverse @@ -106,21 +107,21 @@ class AnatomyQuestion(models.Model): if not unmarked_answers: return "No answers to mark" - return "{} answer unmarked: {}".format(len(unmarked_answers), - ", ".join(unmarked_answers)) + return format_html("{} answer unmarked: {}".format(len(unmarked_answers), + ", ".join(unmarked_answers))) def GetUnmarkedAnswers(self): - user_answers = set([i.answer for i in self.user_answers.all()]) + user_answers = set([i.answer.lower() for i in self.cid_user_answers.all()]) unmarked_answers = user_answers - self.GetMarkedAnswers() return unmarked_answers def GetMarkedAnswers(self): - correct_answers = set([i.answer for i in self.answers.all()]) + correct_answers = set([i.answer.lower() for i in self.answers.all()]) half_mark_answers = set( - [i.answer for i in self.half_mark_answers.all()]) + [i.answer.lower() for i in self.half_mark_answers.all()]) incorrect_answers = set( - [i.answer for i in self.incorrect_answers.all()]) + [i.answer.lower() for i in self.incorrect_answers.all()]) marked_answers = correct_answers | half_mark_answers | incorrect_answers return marked_answers diff --git a/anatomy/static/css/anatomy.css b/anatomy/static/css/anatomy.css index 13742202..312910e9 100644 --- a/anatomy/static/css/anatomy.css +++ b/anatomy/static/css/anatomy.css @@ -3,6 +3,10 @@ body { background-color: black; } +.warn { + color: red; +} + .answer-list { font-size: 30px; } diff --git a/anatomy/templates/anatomy/base.html b/anatomy/templates/anatomy/base.html index 52eb267b..9c109bea 100644 --- a/anatomy/templates/anatomy/base.html +++ b/anatomy/templates/anatomy/base.html @@ -18,6 +18,7 @@ href="{% url 'admin:index' %}">Admin{% endif %}
+ Exams {% block navigation %} {% endblock %}
diff --git a/anatomy/templates/anatomy/exam_list.html b/anatomy/templates/anatomy/exam_list.html index 42e467ba..1fd7e332 100644 --- a/anatomy/templates/anatomy/exam_list.html +++ b/anatomy/templates/anatomy/exam_list.html @@ -1,9 +1,29 @@ {% extends 'anatomy/base.html' %} {% block content %} -{% for exam in exams %} + Active exams:
+
    +{% for exam in exams %} + {% if exam.active %} +
  • + {{exam.name}} (mark) +
  • + {% endif %} {% endfor %} +
+ + Inactive exams:
+
    +{% for exam in exams %} + {% if not exam.active %} +
  • + {{exam.name}} (mark) +
  • + {% endif %} +{% endfor %} +
+ + +
{% endblock %} \ No newline at end of file diff --git a/anatomy/templates/anatomy/exam_overview.html b/anatomy/templates/anatomy/exam_overview.html index 407703e3..f94d8ebd 100644 --- a/anatomy/templates/anatomy/exam_overview.html +++ b/anatomy/templates/anatomy/exam_overview.html @@ -1,9 +1,17 @@ -{% extends 'anatomy/base.html' %} +{% extends 'anatomy/exams.html' %} {% block content %}
-

{{ exam.name }}

+

Exam: {{ exam.name }}

This exam has {{question_number}} questions. -

+

+ + +
    + {% for question in questions.all %} +
  1. {{ question }} + {% endfor %} +
+
{% endblock %} \ No newline at end of file diff --git a/anatomy/templates/anatomy/exam_scores.html b/anatomy/templates/anatomy/exam_scores.html index a0571218..ddac7b3d 100644 --- a/anatomy/templates/anatomy/exam_scores.html +++ b/anatomy/templates/anatomy/exam_scores.html @@ -1,4 +1,4 @@ -{% extends 'anatomy/base.html' %} +{% extends 'anatomy/exams.html' %} {% block content %}
@@ -33,8 +33,3 @@
{% endblock %} - -{% block navigation %} -Exams Marking - overview Scores -{% endblock %} \ No newline at end of file diff --git a/anatomy/templates/anatomy/exams.html b/anatomy/templates/anatomy/exams.html new file mode 100644 index 00000000..d86c79bc --- /dev/null +++ b/anatomy/templates/anatomy/exams.html @@ -0,0 +1,6 @@ +{% extends 'anatomy/base.html' %} + +{% block navigation %} +
+{{exam.name}}-> Overview Mark Scores +{% endblock %} \ No newline at end of file diff --git a/anatomy/templates/anatomy/mark.html b/anatomy/templates/anatomy/mark.html index 1eb2d650..a2668cf8 100644 --- a/anatomy/templates/anatomy/mark.html +++ b/anatomy/templates/anatomy/mark.html @@ -1,4 +1,4 @@ -{% extends 'anatomy/base.html' %} +{% extends 'anatomy/exams.html' %} {% block content %}

Marking question {{question_details.current}} of {{question_details.total}}

@@ -40,8 +40,4 @@
-{% endblock %} -{% block navigation %} -Exams Marking - overview Scores {% endblock %} \ No newline at end of file diff --git a/anatomy/templates/anatomy/mark_overview.html b/anatomy/templates/anatomy/mark_overview.html index bd88cccb..3921f773 100644 --- a/anatomy/templates/anatomy/mark_overview.html +++ b/anatomy/templates/anatomy/mark_overview.html @@ -1,8 +1,9 @@ -{% extends 'anatomy/base.html' %} +{% extends 'anatomy/exams.html' %} {% block content %}
-

{{ exam.name }}

+

Marking exam: {{ exam.name }}

+ Question order will be different on the test system (as it is randomly generated)
    {% for question in questions.all %} @@ -12,9 +13,4 @@

-{% endblock %} - -{% block navigation %} -Exams Marking - overview Scores {% endblock %} \ No newline at end of file diff --git a/anatomy/urls.py b/anatomy/urls.py index b4e14e64..6ec4aa8c 100644 --- a/anatomy/urls.py +++ b/anatomy/urls.py @@ -16,7 +16,7 @@ urlpatterns = [ path("exam//", views.exam_overview, name="exam_overview"), path("exam//scores", views.exam_scores_cid, name="exam_scores_cid"), - path("submit_answers", views.postExamAnswers, name="exam_answers_submit"), + path("exam/submit", views.postExamAnswers, name="exam_answers_submit"), path("exam/", views.exam_list, name="exam_list"), path("exam/json/", views.active_exams, name="active_exams"), path("exam/json/", views.exam_json, name="exam_json"), diff --git a/anatomy/views.py b/anatomy/views.py index 6e46350a..070d9755 100644 --- a/anatomy/views.py +++ b/anatomy/views.py @@ -6,6 +6,8 @@ from django import forms from django.contrib.auth.decorators import login_required, user_passes_test from django.contrib.auth.models import User +from django.db.models.functions import Lower + from django.http import Http404, JsonResponse from .forms import AnatomyAnswerForm, MarkAnatomyQuestionForm @@ -136,6 +138,11 @@ def exam_overview(request, pk): @login_required def exam_take(request, pk, sk): + """ + Allows taking of the exam on the django server (when logged in) + + No longer used (deprecated in favour of using RTS) + """ exam = get_object_or_404(Exam, pk=pk) questions = exam.exam_questions.all() @@ -298,11 +305,11 @@ def mark(request, pk, sk): except IndexError: raise Http404("Exam question does not exist") - correct_answers = [i.answer for i in question.answers.all()] - half_correct_answers = [i.answer for i in question.half_mark_answers.all()] - incorrect_answers = [i.answer for i in question.incorrect_answers.all()] + correct_answers = [i.answer.lower() for i in question.answers.all()] + half_correct_answers = [i.answer.lower() for i in question.half_mark_answers.all()] + incorrect_answers = [i.answer.lower() for i in question.incorrect_answers.all()] - user_answers = (set([i.answer for i in question.user_answers.all()]) - + user_answers = (set([i.answer.lower() for i in question.cid_user_answers.all()]) - set(correct_answers) - set(half_correct_answers) - set(incorrect_answers)) # .filter(user=User) user_answers = set([i for i in user_answers if i.strip() != ""]) @@ -402,7 +409,7 @@ def exam_json(request, pk): for q in questions: exam_questions[q.id] = { - "title": "{}".format(q.examination), + "title": "{}".format(q.description), "question": str(q.question_type), "images": [image_as_base64(q.image)], "type": "anatomy", @@ -432,20 +439,23 @@ def exam_scores_cid(request, pk): user_answers = defaultdict(list) user_names = {} + # Loop through all candidates for cid in cids: # Convoluted (probably...) user_names[cid] = cid for q in questions: - s = q.user_answers.filter(cid=cid) + # Get user answer + s = q.cid_user_answers.filter(cid=cid) if not s: + # skip if no answer user_answers_marks[cid].append(0) user_answers[cid].append("") continue ans = s[0].answer - if ans in q.answers.all().values_list("answer", flat=True): + if ans.lower() in q.answers.all().values_list(Lower("answer"), flat=True): a = 2 - elif ans in q.half_mark_answers.all().values_list("answer", + elif ans.lower() in q.half_mark_answers.all().values_list(Lower("answer"), flat=True): a = 1 else: diff --git a/rad/settings.py b/rad/settings.py index d3ebfa9b..6d09483d 100644 --- a/rad/settings.py +++ b/rad/settings.py @@ -143,9 +143,9 @@ STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static/') REMOTE_URL = "http://161.35.163.87/" - -if DEBUG: - STATIC_URL = REMOTE_URL + STATIC_URL +# +#if DEBUG: +# STATIC_URL = REMOTE_URL + STATIC_URL MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')