From cdf7bc26f43749b4f45f32913ec526ee43fec997 Mon Sep 17 00:00:00 2001 From: Ross Date: Tue, 24 Oct 2023 22:17:53 +0100 Subject: [PATCH] update conditions --- TODO.md | 1 + atlas/forms.py | 5 +++- .../0023_condition_rcr_curriculum_and_more.py | 23 +++++++++++++++++++ atlas/models.py | 4 ++++ atlas/tables.py | 2 +- atlas/urls.py | 6 +++++ atlas/views.py | 16 +++++++++++++ 7 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 atlas/migrations/0023_condition_rcr_curriculum_and_more.py diff --git a/TODO.md b/TODO.md index 47feded1..9c7e76ba 100644 --- a/TODO.md +++ b/TODO.md @@ -10,6 +10,7 @@ - Privacy policy - Cookie policy - Sort out conditions / signs / findings etc +- Search by image id / name / etc # Future diff --git a/atlas/forms.py b/atlas/forms.py index 70dfda67..51a60279 100755 --- a/atlas/forms.py +++ b/atlas/forms.py @@ -52,7 +52,7 @@ import logging class ConditionForm(ModelForm): class Meta: model = Condition - exclude = [] + exclude = ["rcr_curriculum"] widgets = { "synonym": autocomplete.ModelSelect2Multiple( @@ -61,6 +61,9 @@ class ConditionForm(ModelForm): "parent": autocomplete.ModelSelect2Multiple( url="atlas:condition-autocomplete" ), + "rcr_curriculum_map": autocomplete.ModelSelect2Multiple( + url="atlas:condition-autocomplete-rcr-curriculum" + ), } diff --git a/atlas/migrations/0023_condition_rcr_curriculum_and_more.py b/atlas/migrations/0023_condition_rcr_curriculum_and_more.py new file mode 100644 index 00000000..6b086a1e --- /dev/null +++ b/atlas/migrations/0023_condition_rcr_curriculum_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 4.1.4 on 2023-10-24 11:54 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('atlas', '0022_alter_uncategoriseddicom_series_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='condition', + name='rcr_curriculum', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='condition', + name='rcr_curriculum_map', + field=models.ManyToManyField(blank=True, limit_choices_to={'rcr_curriculum': True}, to='atlas.condition'), + ), + ] diff --git a/atlas/models.py b/atlas/models.py index d8964754..e9d20e1c 100644 --- a/atlas/models.py +++ b/atlas/models.py @@ -150,6 +150,10 @@ class Condition(SynMixin, models.Model): subspecialty = models.ManyToManyField("subspecialty", blank=True) + rcr_curriculum_map = models.ManyToManyField("self", blank=True, limit_choices_to={"rcr_curriculum": True}) + + rcr_curriculum = models.BooleanField(default=False) + def get_absolute_url(self): return reverse("atlas:condition_detail", kwargs={"pk": self.pk}) diff --git a/atlas/tables.py b/atlas/tables.py index 8265b6fd..8197214c 100755 --- a/atlas/tables.py +++ b/atlas/tables.py @@ -144,7 +144,7 @@ class ConditionTable(tables.Table): class Meta: model = Condition template_name = "django_tables2/bootstrap4.html" - fields = ("primary", "subspecialty") + fields = ("primary", "subspecialty", "rcr_curriculum_map", "rcr_curriculum") sequence = ("name",) def render_synonym(self, value, record): diff --git a/atlas/urls.py b/atlas/urls.py index c277b433..fe24a0d2 100755 --- a/atlas/urls.py +++ b/atlas/urls.py @@ -279,6 +279,12 @@ urlpatterns = [ views.ConditionAutocomplete.as_view(model=Condition, create_field="name"), name="condition-autocomplete", ), + path( + "condition-autocomplete-rcr-curriculum", + views.ConditionAutocompleteRCRCurriculum.as_view(model=Condition), + name="condition-autocomplete-rcr-curriculum", + ), + path( "presentation-autocomplete", views.PresentationAutocomplete.as_view(model=Presentation, create_field="name"), diff --git a/atlas/views.py b/atlas/views.py index 88dc4b7f..39feddb2 100755 --- a/atlas/views.py +++ b/atlas/views.py @@ -1039,6 +1039,22 @@ class ConditionAutocomplete(autocomplete.Select2QuerySetView): return qs +class ConditionAutocompleteRCRCurriculum(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 Condition.objects.none() + + qs = Condition.objects.filter(rcr_curriculum=True) + + if self.q: + # This raises a fielderror which breaks creating a new item if not caught + try: + qs = qs.filter(name__icontains=self.q, rcr_curriculum=True) + except FieldError: + return Condition.objects.none() + + return qs class PresentationAutocomplete(autocomplete.Select2QuerySetView): def get_queryset(self):