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 = {