Skip to content

Commit

Permalink
implement autocomplete filters
Browse files Browse the repository at this point in the history
  • Loading branch information
nicokant committed Jan 27, 2025
1 parent ae01144 commit 9802332
Show file tree
Hide file tree
Showing 8 changed files with 81 additions and 6 deletions.
3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ dependencies = [
"django-formset",
"django-vite",
"sqlglot[rs]",
"django-view-breadcrumbs"
"django-view-breadcrumbs",
"django-autocomplete-light"
]
description = ""
license = {text = "GPL-3.0+"}
Expand Down
15 changes: 15 additions & 0 deletions src/config/autocomplete.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from django.urls import path
from genlab_bestilling.autocomplete import (
MarkerAutocomplete,
SampleTypeAutocomplete,
SpeciesAutocomplete,
)
from nina.autocomplete import ProjectAutocomplete

app_name = "autocomplete"
urlpatterns = [
path("species/", SpeciesAutocomplete.as_view(), name="species"),
path("sample-type/", SampleTypeAutocomplete.as_view(), name="sample-type"),
path("project/", ProjectAutocomplete.as_view(), name="project"),
path("marker/", MarkerAutocomplete.as_view(), name="marker"),
]
2 changes: 2 additions & 0 deletions src/config/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,8 @@
"drf_standardized_errors",
"procrastinate.contrib.django",
"view_breadcrumbs",
"dal",
"dal_select2",
]

LOCAL_APPS = [
Expand Down
1 change: 1 addition & 0 deletions src/config/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ def get_redirect_url(self, *args: Any, **kwargs: Any) -> str | None:
path(settings.ADMIN_URL, admin.site.urls),
path("ht/", include("health_check.urls")),
path("api/", include("config.routers")),
path("autocomplete/", include("config.autocomplete", namespace="autocomplete")),
path("accounts/", include("allauth.urls")),
path("", include("genlab_bestilling.urls")),
path("staff/", include("genlab_bestilling.staff.urls", namespace="staff")),
Expand Down
15 changes: 15 additions & 0 deletions src/genlab_bestilling/autocomplete.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from dal import autocomplete

from .models import Marker, SampleType, Species


class SpeciesAutocomplete(autocomplete.Select2QuerySetView):
model = Species


class SampleTypeAutocomplete(autocomplete.Select2QuerySetView):
model = SampleType


class MarkerAutocomplete(autocomplete.Select2QuerySetView):
model = Marker
31 changes: 27 additions & 4 deletions src/genlab_bestilling/filters.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from dal import autocomplete
from django_filters import rest_framework as filters

from .models import (
Expand Down Expand Up @@ -97,12 +98,18 @@ class Meta:


class OrderFilter(filters.FilterSet):
def __init__(self, data=None, queryset=None, *, request=None, prefix=None):
super().__init__(data, queryset, request=request, prefix=prefix)
self.filters["genrequest__project"].extra["widget"] = (
autocomplete.ModelSelect2Multiple(url="autocomplete:project")
)

class Meta:
model = Order
fields = {
"status": ["exact"],
"name": ["istartswith"],
"genrequest__project__number": ["exact"],
"genrequest__project": ["exact"],
}


Expand All @@ -112,18 +119,27 @@ class Meta:
fields = {
"status": ["exact"],
"name": ["istartswith"],
"genrequest__project__number": ["exact"],
"genrequest__project": ["exact"],
"needs_guid": ["exact"],
}


class OrderExtractionFilter(OrderFilter):
def __init__(self, data=None, queryset=None, *, request=None, prefix=None):
super().__init__(data, queryset, request=request, prefix=prefix)
self.filters["species"].extra["widget"] = autocomplete.ModelSelect2Multiple(
url="autocomplete:species"
)
self.filters["sample_types"].extra["widget"] = (
autocomplete.ModelSelect2Multiple(url="autocomplete:sample-type")
)

class Meta:
model = ExtractionOrder
fields = {
"status": ["exact"],
"name": ["istartswith"],
"genrequest__project__number": ["exact"],
"genrequest__project": ["exact"],
"species": ["exact"],
"sample_types": ["exact"],
"needs_guid": ["exact"],
Expand All @@ -133,10 +149,17 @@ class Meta:


class OrderAnalysisFilter(OrderFilter):
def __init__(self, data=None, queryset=None, *, request=None, prefix=None):
super().__init__(data, queryset, request=request, prefix=prefix)
self.filters["markers"].extra["widget"] = autocomplete.ModelSelect2Multiple(
url="autocomplete:marker"
)

class Meta:
model = AnalysisOrder
fields = {
"status": ["exact"],
"name": ["istartswith"],
"genrequest__project__number": ["exact"],
"markers": ["exact"],
"genrequest__project": ["exact"],
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load crispy_forms_tags %}
{% load crispy_forms_tags static %}
{% load render_table from django_tables2 %}

{% block content %}
Expand All @@ -15,3 +15,13 @@ <h3 class="text-4xl mb-5">{% block page-title %}{% endblock page-title %}</h3>

{% render_table table %}
{% endblock %}

{% block body_javascript %}
{{ block.super }}
<script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.js' %}"></script>

<!-- comment -->
{{ filter.form.media }}
<!-- end comment -->

{% endblock body_javascript %}
8 changes: 8 additions & 0 deletions src/nina/autocomplete.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from dal import autocomplete

from .models import Project


class ProjectAutocomplete(autocomplete.Select2QuerySetView):
model = Project
search_fields = ["name", "number"]

0 comments on commit 9802332

Please sign in to comment.