From 298cfe391cd976c02801d2651f3c5ac2fcd12b4e Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 10 Jan 2024 23:12:38 +0000 Subject: [PATCH] move anatomy structure to atlas --- anatomy/admin.py | 2 -- anatomy/forms.py | 10 ++----- ...tomyquestion_structure_delete_structure.py | 23 ++++++++++++++ anatomy/models.py | 18 +---------- anatomy/tests/test_anatomy_exams.py | 4 +-- anatomy/urls.py | 12 -------- anatomy/views.py | 30 ------------------- 7 files changed, 28 insertions(+), 71 deletions(-) create mode 100644 anatomy/migrations/0006_alter_anatomyquestion_structure_delete_structure.py diff --git a/anatomy/admin.py b/anatomy/admin.py index 23344123..af4c9d73 100644 --- a/anatomy/admin.py +++ b/anatomy/admin.py @@ -9,7 +9,6 @@ from .models import ( #Modality, Region, BodyPart, - Structure, ) from generic.models import Examination @@ -58,5 +57,4 @@ admin.site.register(UserAnswer) admin.site.register(Exam, ExamAdmin) admin.site.register(Region) admin.site.register(BodyPart) -admin.site.register(Structure) diff --git a/anatomy/forms.py b/anatomy/forms.py index 25c083d7..5a20a1e7 100644 --- a/anatomy/forms.py +++ b/anatomy/forms.py @@ -16,7 +16,7 @@ from .models import ( AnatomyQuestion, # Examination, BodyPart, - Structure, + #Structure, Region, Modality, QuestionType, @@ -150,7 +150,7 @@ class AnatomyQuestionForm(ModelForm): ] widgets = { - "structure": autocomplete.ModelSelect2(url="anatomy:structure-autocomplete") + "structure": autocomplete.ModelSelect2(url="atlas:structure-autocomplete") } @@ -191,12 +191,6 @@ class ExaminationForm(ModelForm): fields = ["examination"] -class StructureForm(ModelForm): - class Meta: - model = Structure - fields = ["structure"] - - class BodyPartForm(ModelForm): class Meta: model = BodyPart diff --git a/anatomy/migrations/0006_alter_anatomyquestion_structure_delete_structure.py b/anatomy/migrations/0006_alter_anatomyquestion_structure_delete_structure.py new file mode 100644 index 00000000..fb393ad9 --- /dev/null +++ b/anatomy/migrations/0006_alter_anatomyquestion_structure_delete_structure.py @@ -0,0 +1,23 @@ +# Generated by Django 4.1.4 on 2024-01-10 23:12 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('atlas', '0037_alter_seriesimage_image_blake3_hash'), + ('anatomy', '0005_exam_stats_graph'), + ] + + operations = [ + migrations.AlterField( + model_name='anatomyquestion', + name='structure', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='atlas.structure'), + ), + migrations.DeleteModel( + name='Structure', + ), + ] diff --git a/anatomy/models.py b/anatomy/models.py index fc192e1c..02831a64 100644 --- a/anatomy/models.py +++ b/anatomy/models.py @@ -17,6 +17,7 @@ from sortedm2m.fields import SortedManyToManyField import string from generic.models import CidUser, CidUserGroup, ExamUserStatus, Examination, ExamBase, QuestionBase, QuestionNote, UserAnswerBase, UserUserGroup, Modality +from atlas.models import Structure from collections import defaultdict from helpers.images import image_as_base64 @@ -47,13 +48,6 @@ class BodyPart(models.Model): return self.bodypart -class Structure(models.Model): - structure = models.CharField(max_length=200, unique=True) - - def __str__(self): - return self.structure - - class Region(models.Model): region = models.CharField(max_length=200) @@ -139,16 +133,6 @@ class AnatomyQuestion(QuestionBase): self.modality, self.structure, ) - # Get associated exams - e = self.exams.all().values_list("name", flat=True) - exams = ", ".join(e) - - if a is None: - return "({})".format(exams) - else: - return "{} ({}) [{}, {}]".format( - a.answer, exams, self.modality, self.structure - ) def get_link(self): return format_html("{}", self.get_absolute_url(), self) diff --git a/anatomy/tests/test_anatomy_exams.py b/anatomy/tests/test_anatomy_exams.py index 6eca2334..d1cb6c31 100644 --- a/anatomy/tests/test_anatomy_exams.py +++ b/anatomy/tests/test_anatomy_exams.py @@ -54,9 +54,9 @@ def create_exam(db): def create_structures(db): - structure = Structure.objects.create(structure="test structure") + structure = Structure.objects.create(name="test structure") structure.save() - structure = Structure.objects.create(structure="test structure 2") + structure = Structure.objects.create(name="test structure 2") structure.save() diff --git a/anatomy/urls.py b/anatomy/urls.py index 77d2ffe6..20b0a758 100644 --- a/anatomy/urls.py +++ b/anatomy/urls.py @@ -1,6 +1,5 @@ from django.urls import path, include -from anatomy.models import Structure from generic.urls import generic_exam_urls, generic_view_urls from . import views from django.views.decorators.cache import cache_page @@ -59,12 +58,6 @@ urlpatterns = [ 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", @@ -84,11 +77,6 @@ urlpatterns = [ views.UserAnswerDelete.as_view(), name="user_answer_delete", ), - path( - "structure-autocomplete", - views.StructureAutocomplete.as_view(model=Structure, create_field="structure"), - name="structure-autocomplete", - ), ] urlpatterns.extend(generic_view_urls(views.GenericViews)) diff --git a/anatomy/views.py b/anatomy/views.py index d8deb41a..5a6a2fe7 100644 --- a/anatomy/views.py +++ b/anatomy/views.py @@ -35,7 +35,6 @@ from .forms import ( ExaminationForm, MarkAnatomyQuestionForm, AnatomyQuestionForm, - StructureForm, ExamForm, ) from .models import ( @@ -674,18 +673,6 @@ def get_examination_id(request): 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 @@ -807,20 +794,3 @@ GenericViews = GenericViewBase("anatomy", AnatomyQuestion, UserAnswer, Exam) class ExamClone(ExamCloneMixin, ExamCreate): """Clone exam view""" - -class StructureAutocomplete(autocomplete.Select2QuerySetView): - def get_queryset(self): - # Don't forget to filter out results depending on the visitor ! - if not self.request.user.is_authenticated: - return Structure.objects.none() - - qs = Structure.objects.all() - - if self.q: - # This raises a fielderror which breaks creating a new item if not caught - try: - qs = qs.filter(structure__icontains=self.q) - except FieldError: - return Structure.objects.none() - - return qs