From 0ff60da006d237ede4ad5db63ddd73a24c4d8c02 Mon Sep 17 00:00:00 2001 From: Ross Date: Thu, 6 Nov 2025 22:18:50 +0000 Subject: [PATCH] Add date range filtering to exams with jQuery UI datepicker support --- .../generic/partials/filter_bar.html | 22 ++++++++++++++++++- generic/views.py | 20 ++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/generic/templates/generic/partials/filter_bar.html b/generic/templates/generic/partials/filter_bar.html index e30f7d6f..332adbb0 100644 --- a/generic/templates/generic/partials/filter_bar.html +++ b/generic/templates/generic/partials/filter_bar.html @@ -162,4 +162,24 @@ .btn-outline-secondary { color: #e6eef6; border-color: rgba(255,255,255,0.06); } .btn-light { background: #111827; color: #e6eef6; border-color: rgba(255,255,255,0.04); } .filter-card label { color: #e6eef6; } - \ No newline at end of file + + + + + \ No newline at end of file diff --git a/generic/views.py b/generic/views.py index 57a1c38c..ca86f9b9 100644 --- a/generic/views.py +++ b/generic/views.py @@ -43,7 +43,13 @@ from django.views.generic.edit import CreateView, UpdateView, DeleteView from django.views.generic.list import ListView from django.views.generic.detail import DetailView from django_filters.views import FilterView -from django_filters import FilterSet, OrderingFilter, ModelMultipleChoiceFilter +from django_filters import ( + FilterSet, + OrderingFilter, + ModelMultipleChoiceFilter, + DateFromToRangeFilter, +) +from django_filters.widgets import DateRangeWidget from django_tables2.views import SingleTableMixin from reversion.views import RevisionMixin from atlas.models import CaseCollection, CaseDetail @@ -733,6 +739,18 @@ class ExamViews(View, LoginRequiredMixin): fields=(("name", "name"), ("exam_mode", "exam_mode")) ) + # Allow filtering by start/end date ranges (render as paired date inputs) + start_date = DateFromToRangeFilter( + field_name="start_date", + label="Start date", + widget=DateRangeWidget(attrs={"class": "datepicker", "autocomplete": "off", "placeholder": "dd/mm/yyyy"}), + ) + end_date = DateFromToRangeFilter( + field_name="end_date", + label="End date", + widget=DateRangeWidget(attrs={"class": "datepicker", "autocomplete": "off", "placeholder": "dd/mm/yyyy"}), + ) + class Meta: model = exam fields = {