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 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 from . import views
app_name = "atlas" app_name = "atlas"
@@ -528,6 +528,11 @@ urlpatterns = [
views.StructureAutocomplete.as_view(model=Structure, create_field="name", validate_create=True), views.StructureAutocomplete.as_view(model=Structure, create_field="name", validate_create=True),
name="structure-autocomplete", 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/", views.PresentationView.as_view(), name="presentation_view"),
path( path(
"presentation/<int:pk>", views.presentation_detail, name="presentation_detail" "presentation/<int:pk>", views.presentation_detail, name="presentation_detail"
+18
View File
@@ -1978,6 +1978,24 @@ class StructureAutocomplete(autocomplete.Select2QuerySetView):
return qs 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 @login_required
# @user_is_atlas_editor # @user_is_atlas_editor
def categories_list(request): def categories_list(request):
+8 -3
View File
@@ -2,7 +2,7 @@ import django_filters
from dal import autocomplete from dal import autocomplete
from .models import Category, Question, UserAnswer, Exam 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 generic.filters import UserAnswerFilter
from django.contrib.auth.models import User from django.contrib.auth.models import User
@@ -34,7 +34,12 @@ def get_authors(request):
class QuestionFilter(django_filters.FilterSet): class QuestionFilter(django_filters.FilterSet):
exams = django_filters.ModelMultipleChoiceFilter(queryset=get_exams, null_label="No exam") exams = django_filters.ModelMultipleChoiceFilter(queryset=get_exams, null_label="No exam")
author = django_filters.ModelMultipleChoiceFilter(queryset=get_authors, null_label="No author") 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( condition = django_filters.ModelMultipleChoiceFilter(
queryset=Condition.objects.all(), queryset=Condition.objects.all(),
widget=autocomplete.ModelSelect2Multiple(url='atlas:condition-autocomplete'), widget=autocomplete.ModelSelect2Multiple(url='atlas:condition-autocomplete'),
@@ -57,7 +62,7 @@ class QuestionFilter(django_filters.FilterSet):
) )
class Meta: class Meta:
model = Question 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): 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(): if not request.user.groups.filter(name="sba_checker").exists():