From 3de77b6d5fac01fa289d9f37b3735eb56fb610e4 Mon Sep 17 00:00:00 2001 From: Ross Date: Sun, 6 Dec 2020 22:49:35 +0000 Subject: [PATCH] improve question adding --- anatomy/forms.py | 33 +++++++ .../anatomy/anatomyquestion_form.html | 10 +- anatomy/templates/anatomy/base.html | 1 + anatomy/templates/anatomy/create_simple.html | 5 + .../templates/anatomy/question_detail.html | 8 ++ anatomy/urls.py | 18 +++- anatomy/views.py | 93 +++++++++++++++++-- 7 files changed, 152 insertions(+), 16 deletions(-) create mode 100644 anatomy/templates/anatomy/create_simple.html diff --git a/anatomy/forms.py b/anatomy/forms.py index 32cf3265..8ec69255 100644 --- a/anatomy/forms.py +++ b/anatomy/forms.py @@ -116,3 +116,36 @@ AnswerFormSet = inlineformset_factory( max_num=10, field_classes="testing", ) + +AnswerUpdateFormSet = inlineformset_factory( + AnatomyQuestion, + Answer, + fields=["answer", "status"], + widgets={ + "answer": TextInput( + attrs={"required": "true", "minlength": 2, "maxlength": 500} + ) + }, + exclude=[], + can_delete=True, + extra=0, + max_num=10, + field_classes="testing", +) + +class ExaminationForm(ModelForm): + class Meta: + model = Examination + fields = ['examination'] + + +class StructureForm(ModelForm): + class Meta: + model = Structure + fields = ['structure'] + + +class BodyPartForm(ModelForm): + class Meta: + model = BodyPart + fields = ['bodypart'] \ No newline at end of file diff --git a/anatomy/templates/anatomy/anatomyquestion_form.html b/anatomy/templates/anatomy/anatomyquestion_form.html index ae94937a..f5996a5e 100644 --- a/anatomy/templates/anatomy/anatomyquestion_form.html +++ b/anatomy/templates/anatomy/anatomyquestion_form.html @@ -34,9 +34,9 @@ $(document).ready(function () { - $("#add_abnormality").appendTo($("label[for='id_abnormality']")); $("#add_examination").appendTo($("label[for='id_examination']")); - $("#add_region").appendTo($("label[for='id_region']")); + $("#add_body_part").appendTo($("label[for='id_body_part']")); + $("#add_structure").appendTo($("label[for='id_structure']")); dropContainer = document.getElementById("drop-container"); @@ -224,11 +224,11 @@

Submit Question

{% csrf_token %} - - - diff --git a/anatomy/templates/anatomy/base.html b/anatomy/templates/anatomy/base.html index cd70b5f0..df687bc9 100644 --- a/anatomy/templates/anatomy/base.html +++ b/anatomy/templates/anatomy/base.html @@ -27,6 +27,7 @@
Exams + Create Question {% block navigation %} {% endblock %}
diff --git a/anatomy/templates/anatomy/create_simple.html b/anatomy/templates/anatomy/create_simple.html new file mode 100644 index 00000000..14e906af --- /dev/null +++ b/anatomy/templates/anatomy/create_simple.html @@ -0,0 +1,5 @@ +

Add new {{name}}

+{% csrf_token %} + {{ form.as_p }} + + \ No newline at end of file diff --git a/anatomy/templates/anatomy/question_detail.html b/anatomy/templates/anatomy/question_detail.html index 3a1d8b75..923c1be7 100644 --- a/anatomy/templates/anatomy/question_detail.html +++ b/anatomy/templates/anatomy/question_detail.html @@ -8,6 +8,8 @@
+Edit +Admin Edit
Created: {{ question.created_date }}
@@ -21,6 +23,12 @@ {{ exam.name }} {% endfor %}
+
+ Modality: {{ question.modality }} +
+
+ Region: {{ question.region }} +
Annotation JSON: {{ question.image_annotations }}
diff --git a/anatomy/urls.py b/anatomy/urls.py index 1f70a860..db990615 100644 --- a/anatomy/urls.py +++ b/anatomy/urls.py @@ -8,7 +8,7 @@ urlpatterns = [ path("", views.index, name="index"), path("question//", views.question_detail, name="question_detail"), path("question/create/", views.AnatomyQuestionCreate.as_view(), name="anatomy_question_create"), - path("question//update", views.AnatomyQuestionUpdate.as_view(), name="anatomy_question_create"), + path("question//update", views.AnatomyQuestionUpdate.as_view(), name="anatomy_question_update"), path("question//save_annotation", views.question_save_annotation, name="question_save_annotation"), path("question//answer/", views.answer_question, @@ -29,4 +29,20 @@ urlpatterns = [ path("exam/json//recreate", views.exam_json_recreate, name="exam_json_recreate"), path("cid//scores", views.cid_scores, name="cid_scores"), path("ajax/exam/flag/", views.flag_question, name="flag_question"), + path("body_part/create/", views.create_body_part, name="create_body_part"), + path("body_part/ajax/get_body_part_id", + views.get_body_part_id, + name="get_body_part_id"), + path("structure/create/", + views.create_structure, + name="create_structure"), + path("structure/ajax/get_structure_id", + views.get_structure_id, + name="get_structure_id"), + path("examination/create/", + views.create_examination, + name="create_examination"), + path("examination/ajax/get_examination_id", + views.get_examination_id, + name="get_examination_id"), ] diff --git a/anatomy/views.py b/anatomy/views.py index c2bbf47c..f9c052d8 100644 --- a/anatomy/views.py +++ b/anatomy/views.py @@ -21,10 +21,10 @@ from django.http import Http404, JsonResponse from django.http import HttpResponseRedirect, HttpResponse -from .forms import AnatomyAnswerForm, AnswerFormSet, MarkAnatomyQuestionForm, AnatomyQuestionForm +from .forms import AnatomyAnswerForm, AnswerFormSet, AnswerUpdateFormSet, BodyPartForm, ExaminationForm, MarkAnatomyQuestionForm, AnatomyQuestionForm, StructureForm from .models import ( - AnatomyQuestion, - CidUserAnswer, + AnatomyQuestion, BodyPart, + CidUserAnswer, Examination, Structure, UserAnswer, Exam, Answer, @@ -828,19 +828,15 @@ class AnatomyQuestionUpdate(LoginRequiredMixin, UpdateView): model = AnatomyQuestion form_class = AnatomyQuestionForm - # fields = '__all__' - # #fields = [ 'condition' ] - # #initial = {'date_of_death': '05/01/2018'} - # exclude = [ 'created_date', 'published_date' ] def get_context_data(self, **kwargs): context = super(AnatomyQuestionUpdate, self).get_context_data(**kwargs) if self.request.POST: - context['answer_formset'] = AnswerFormSet(self.request.POST, + context['answer_formset'] = AnswerUpdateFormSet(self.request.POST, self.request.FILES, instance=self.object) context['answer_formset'].full_clean() else: - context['answer_formset'] = AnswerFormSet(instance=self.object) + context['answer_formset'] = AnswerUpdateFormSet(instance=self.object) return context def form_valid(self, form): @@ -859,4 +855,81 @@ class AnatomyQuestionUpdate(LoginRequiredMixin, UpdateView): formset.save() return response else: - return super().form_invalid(form) \ No newline at end of file + return super().form_invalid(form) + +@login_required +def create_body_part(request): + form = BodyPartForm(request.POST or None) + if form.is_valid(): + instance = form.save() + return HttpResponse( + '' + % (instance.pk, instance)) + return render(request, "anatomy/create_simple.html", { + 'form': form, + 'name': "BodyPart" + }) + + +@csrf_exempt +def get_body_part_id(request): + if request.is_ajax(): + body_part_name = request.GET['body_part_name'] + body_part_id = BodyPart.objects.get(name=body_part_name).id + data = { + 'body_part_id': body_part_id, + } + return HttpResponse(json.dumps(data), content_type='application/json') + return HttpResponse("/") + + +@login_required +def create_examination(request): + form = ExaminationForm(request.POST or None) + if form.is_valid(): + instance = form.save() + return HttpResponse( + '' + % (instance.pk, instance)) + return render(request, "anatomy/create_simple.html", { + 'form': form, + 'name': "Examination" + }) + + +@csrf_exempt +def get_examination_id(request): + if request.is_ajax(): + examination_name = request.GET['examination_name'] + examination_id = Examination.objects.get(name=examination_name).id + data = { + 'examination_id': examination_id, + } + return HttpResponse(json.dumps(data), content_type='application/json') + return HttpResponse("/") + + +@login_required +def create_structure(request): + form = StructureForm(request.POST or None) + if form.is_valid(): + instance = form.save() + return HttpResponse( + '' + % (instance.pk, instance)) + return render(request, "anatomy/create_simple.html", { + 'form': form, + 'name': "Structure" + }) + + +@csrf_exempt +def get_structure_id(request): + if request.is_ajax(): + structure_name = request.GET['structure_name'] + structure_id = Structure.objects.get(name=structure_name).id + data = { + 'structure_id': structure_id, + } + return HttpResponse(json.dumps(data), content_type='application/json') + return HttpResponse("/") \ No newline at end of file