Add Subspecialty autocomplete and filter to QuestionFilter

This commit is contained in:
Ross
2025-10-20 16:17:07 +01:00
parent 512b222ccc
commit 3daad1b83b
3 changed files with 32 additions and 4 deletions
+6 -1
View File
@@ -2,7 +2,7 @@ from django.urls import path, include
from django.views.generic import RedirectView, TemplateView
from atlas.models import Condition, Finding, Presentation, Structure
from atlas.models import Condition, Finding, Presentation, Structure, Subspecialty
from . import views
app_name = "atlas"
@@ -528,6 +528,11 @@ urlpatterns = [
views.StructureAutocomplete.as_view(model=Structure, create_field="name", validate_create=True),
name="structure-autocomplete",
),
path(
"subspecialty-autocomplete",
views.SubspecialtyAutocomplete.as_view(model=Subspecialty, create_field="name"),
name="subspecialty-autocomplete",
),
path("presentation/", views.PresentationView.as_view(), name="presentation_view"),
path(
"presentation/<int:pk>", views.presentation_detail, name="presentation_detail"
+18
View File
@@ -1978,6 +1978,24 @@ class StructureAutocomplete(autocomplete.Select2QuerySetView):
return qs
class SubspecialtyAutocomplete(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 Subspecialty.objects.none()
qs = Subspecialty.objects.all()
if self.q:
# This raises a fielderror which breaks creating a new item if not caught
try:
qs = qs.filter(name__icontains=self.q)
except FieldError:
return Subspecialty.objects.none()
return qs
@login_required
# @user_is_atlas_editor
def categories_list(request):
+8 -3
View File
@@ -2,7 +2,7 @@ import django_filters
from dal import autocomplete
from .models import Category, Question, UserAnswer, Exam
from atlas.models import Condition, Structure, Finding, Presentation
from atlas.models import Condition, Structure, Finding, Presentation, Subspecialty
#from generic.filters import UserAnswerFilter
from django.contrib.auth.models import User
@@ -34,7 +34,12 @@ def get_authors(request):
class QuestionFilter(django_filters.FilterSet):
exams = django_filters.ModelMultipleChoiceFilter(queryset=get_exams, null_label="No exam")
author = django_filters.ModelMultipleChoiceFilter(queryset=get_authors, null_label="No author")
category = django_filters.ModelChoiceFilter(queryset=Category.objects.all(),null_label="Uncategorised")
category = django_filters.ModelMultipleChoiceFilter(queryset=Category.objects.all(),null_label="Uncategorised")
subspecialty = django_filters.ModelMultipleChoiceFilter(
queryset=Subspecialty.objects.all(),
widget=autocomplete.ModelSelect2Multiple(url='atlas:subspecialty-autocomplete'),
label='Subspecialty',
)
condition = django_filters.ModelMultipleChoiceFilter(
queryset=Condition.objects.all(),
widget=autocomplete.ModelSelect2Multiple(url='atlas:condition-autocomplete'),
@@ -57,7 +62,7 @@ class QuestionFilter(django_filters.FilterSet):
)
class Meta:
model = Question
fields = ("exams", "created_date", "condition", "structure", "finding", "presentation")
fields = ("exams", "created_date", "condition", "structure", "finding", "presentation", "category", "subspecialty")
def __init__(self, data=None, queryset=None, prefix=None, strict=None, user=None, request=None):
if not request.user.groups.filter(name="sba_checker").exists():