add suggested answers to anatomy

This commit is contained in:
Ross
2024-01-11 22:14:58 +00:00
parent fe2920ca39
commit 5aa81cf7c1
7 changed files with 47 additions and 1 deletions
+5
View File
@@ -7,6 +7,8 @@ from django.forms import (
CharField, CharField,
) )
from django.forms import inlineformset_factory from django.forms import inlineformset_factory
from django.contrib.postgres.forms import SimpleArrayField, SplitArrayField , SplitArrayWidget
from generic.forms import ExamAuthorFormMixin, ExamFormMixin from generic.forms import ExamAuthorFormMixin, ExamFormMixin
@@ -102,6 +104,8 @@ class AnatomyQuestionForm(ModelForm):
queryset=BodyPart.objects.all(), queryset=BodyPart.objects.all(),
) )
self.fields["answer_suggest_incorrect"] = CharField(max_length=255, required=False)
if self.user.groups.filter(name="anatomy_checker").exists(): if self.user.groups.filter(name="anatomy_checker").exists():
exam_queryset = Exam.objects.all() exam_queryset = Exam.objects.all()
else: else:
@@ -142,6 +146,7 @@ class AnatomyQuestionForm(ModelForm):
"question_type", "question_type",
"image", "image",
"answer_help", "answer_help",
"answer_suggest_incorrect",
"region", "region",
"modality", "modality",
"structure", "structure",
@@ -0,0 +1,19 @@
# Generated by Django 4.1.4 on 2024-01-11 21:41
import django.contrib.postgres.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('anatomy', '0008_alter_anatomyquestion_answer_help'),
]
operations = [
migrations.AddField(
model_name='anatomyquestion',
name='answer_suggest_incorrect',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=255), default=list, size=None),
),
]
+3
View File
@@ -3,6 +3,7 @@ import json
from django.contrib.contenttypes.fields import GenericRelation from django.contrib.contenttypes.fields import GenericRelation
from django.db import models from django.db import models
from django.utils import timezone from django.utils import timezone
from django.contrib.postgres.fields import ArrayField
from django.core.files.storage import FileSystemStorage from django.core.files.storage import FileSystemStorage
from django.conf import settings from django.conf import settings
@@ -93,6 +94,8 @@ class AnatomyQuestion(QuestionBase):
answer_help = models.TextField(default="", blank=True, null=True, help_text="Helpful information for marking") answer_help = models.TextField(default="", blank=True, null=True, help_text="Helpful information for marking")
answer_suggest_incorrect = ArrayField(models.CharField(max_length=255), default=list)
examination = models.ForeignKey( examination = models.ForeignKey(
Examination, on_delete=models.SET_NULL, null=True, blank=True Examination, on_delete=models.SET_NULL, null=True, blank=True
) )
+8
View File
@@ -23,7 +23,12 @@
Unmarked: Unmarked:
<ul id="new-answer-list" class="answer-list"> <ul id="new-answer-list" class="answer-list">
{% for answer in user_answers %} {% for answer in user_answers %}
{% if answer in answer_suggest_incorrect %}
<li><pre><span class="answer incorrect suggest" title="{{answer}}" data-answerurl="{% url 'anatomy:question_user_answers_by_compare' question.pk answer %}">{{ answer }}</span></pre></li>
{% else %}
<li><pre><span class="answer not-marked" title="{{answer}}" data-answerurl="{% url 'anatomy:question_user_answers_by_compare' question.pk answer %}">{{ answer }}</span></pre></li> <li><pre><span class="answer not-marked" title="{{answer}}" data-answerurl="{% url 'anatomy:question_user_answers_by_compare' question.pk answer %}">{{ answer }}</span></pre></li>
{% endif %}
{% endfor %} {% endfor %}
</ul> </ul>
Marked: Marked:
@@ -112,6 +117,9 @@
{% block css %} {% block css %}
<style> <style>
.suggest {
border: 1px dashed;
}
#primary-answer { #primary-answer {
font-weight: strong; font-weight: strong;
color: white; color: white;
@@ -62,6 +62,9 @@
<div> <div>
Answer help: {{ question.answer_help|safe }} Answer help: {{ question.answer_help|safe }}
</div> </div>
<div>
Answer suggest incorrect: {{ question.answer_suggest_incorrect }}
</div>
<div> <div>
Description: {{ question.description }} Description: {{ question.description }}
</div> </div>
+7
View File
@@ -337,6 +337,7 @@ def mark(request, exam_pk, sk, unmarked_exam_answers_only=True, review=False):
half_mark_answers = question.answers.filter(status=Answer.MarkOptions.HALF_MARK) half_mark_answers = question.answers.filter(status=Answer.MarkOptions.HALF_MARK)
incorrect_answers = question.answers.filter(status=Answer.MarkOptions.INCORRECT) incorrect_answers = question.answers.filter(status=Answer.MarkOptions.INCORRECT)
answer_suggest_incorrect: list = []
if review: if review:
for ans in unmarked_user_answers: for ans in unmarked_user_answers:
# duplicated from user answer model.... # duplicated from user answer model....
@@ -352,6 +353,11 @@ def mark(request, exam_pk, sk, unmarked_exam_answers_only=True, review=False):
if mark == "unmarked": if mark == "unmarked":
unmarked_answers_bool = True unmarked_answers_bool = True
review_user_answers.append((ans, mark)) review_user_answers.append((ans, mark))
else:
for ans in unmarked_user_answers:
for suggest_incorrect in question.answer_suggest_incorrect:
if suggest_incorrect in ans:
answer_suggest_incorrect.append(ans)
return render( return render(
request, request,
@@ -370,6 +376,7 @@ def mark(request, exam_pk, sk, unmarked_exam_answers_only=True, review=False):
"half_mark_answers": half_mark_answers, "half_mark_answers": half_mark_answers,
"incorrect_answers": incorrect_answers, "incorrect_answers": incorrect_answers,
"unmarked_exam_answers_only": unmarked_exam_answers_only, "unmarked_exam_answers_only": unmarked_exam_answers_only,
"answer_suggest_incorrect": answer_suggest_incorrect,
}, },
) )
+1
View File
@@ -69,6 +69,7 @@ INSTALLED_APPS = [
"django.contrib.sessions", "django.contrib.sessions",
"django.contrib.messages", "django.contrib.messages",
"django.contrib.staticfiles", "django.contrib.staticfiles",
"django.contrib.postgres",
"dbbackup", "dbbackup",
"rest_framework", "rest_framework",
"tinymce", "tinymce",