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