From 3b743bff4988b152232650d8c854b755568bdf82 Mon Sep 17 00:00:00 2001 From: Zaki Benaissa Date: Sun, 7 Jan 2024 14:44:42 +0100 Subject: [PATCH] Add filter to programs data --- course/filters.py | 18 ++++++++++++++++++ course/urls.py | 2 +- course/views.py | 28 ++++++++++------------------ templates/course/program_list.html | 7 +++---- 4 files changed, 32 insertions(+), 23 deletions(-) create mode 100644 course/filters.py diff --git a/course/filters.py b/course/filters.py new file mode 100644 index 0000000..2358ad1 --- /dev/null +++ b/course/filters.py @@ -0,0 +1,18 @@ +import django_filters +from .models import Program + + +class ProgramFilter(django_filters.FilterSet): + title = django_filters.CharFilter(lookup_expr="icontains", label="") + + class Meta: + model = Program + fields = ["title"] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + # Change html classes and placeholders + self.filters["title"].field.widget.attrs.update( + {"class": "au-input", "placeholder": "Program name"} + ) diff --git a/course/urls.py b/course/urls.py index 9da1327..87df578 100644 --- a/course/urls.py +++ b/course/urls.py @@ -4,7 +4,7 @@ from .views import * urlpatterns = [ # Program urls - path("", program_view, name="programs"), + path("", ProgramFilterView.as_view(), name="programs"), path("/detail/", program_detail, name="program_detail"), path("add/", program_add, name="add_program"), path("/edit/", program_edit, name="edit_program"), diff --git a/course/views.py b/course/views.py index 1eb4aaa..6781622 100644 --- a/course/views.py +++ b/course/views.py @@ -7,6 +7,7 @@ from django.core.paginator import Paginator from django.conf import settings from django.utils.decorators import method_decorator from django.views.generic import ListView +from django_filters.views import FilterView from accounts.models import User, Student from core.models import Session, Semester @@ -20,28 +21,19 @@ from .forms import ( UploadFormFile, UploadFormVideo, ) +from .filters import ProgramFilter from .models import Program, Course, CourseAllocation, Upload, UploadVideo -# ######################################################## -# Program views -# ######################################################## -@login_required -def program_view(request): - programs = Program.objects.all() +@method_decorator([login_required], name="dispatch") +class ProgramFilterView(FilterView): + filterset_class = ProgramFilter + template_name = "course/program_list.html" - program_filter = request.GET.get("program_filter") - if program_filter: - programs = Program.objects.filter(title__icontains=program_filter) - - return render( - request, - "course/program_list.html", - { - "title": "Programs", - "programs": programs, - }, - ) + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["title"] = "Programs" + return context @login_required diff --git a/templates/course/program_list.html b/templates/course/program_list.html index e257b89..745be26 100644 --- a/templates/course/program_list.html +++ b/templates/course/program_list.html @@ -27,9 +27,8 @@ {% endif %}
-
{% csrf_token %} - + + {{ filter.form }} @@ -72,7 +71,7 @@ - {% for program in programs %} + {% for program in filter.qs %} {{ forloop.counter }}.