Make lecturers fiterable
This commit is contained in:
parent
222ddab9cb
commit
a59ccae6d5
31
accounts/filters.py
Normal file
31
accounts/filters.py
Normal file
@ -0,0 +1,31 @@
|
||||
from django.db.models import Q
|
||||
import django_filters
|
||||
from .models import User
|
||||
|
||||
|
||||
class LecturerFilter(django_filters.FilterSet):
|
||||
username = django_filters.CharFilter(lookup_expr="exact", label="")
|
||||
name = django_filters.CharFilter(method="filter_by_name", label="")
|
||||
email = django_filters.CharFilter(lookup_expr="icontains", label="")
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ["username", "email"]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
# Change html classes and placeholders
|
||||
self.filters["username"].field.widget.attrs.update({"class": "au-input"})
|
||||
self.filters["username"].field.widget.attrs.update({"placeholder": "ID No."})
|
||||
|
||||
self.filters["name"].field.widget.attrs.update({"class": "au-input"})
|
||||
self.filters["name"].field.widget.attrs.update({"placeholder": "Name"})
|
||||
|
||||
self.filters["email"].field.widget.attrs.update({"class": "au-input"})
|
||||
self.filters["email"].field.widget.attrs.update({"placeholder": "Email"})
|
||||
|
||||
def filter_by_name(self, queryset, name, value):
|
||||
return queryset.filter(
|
||||
Q(first_name__icontains=value) | Q(last_name__icontains=value)
|
||||
)
|
||||
@ -7,12 +7,14 @@ from django.views.generic import CreateView, ListView
|
||||
from django.db.models import Q
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.contrib.auth.forms import PasswordChangeForm
|
||||
from django_filters.views import FilterView
|
||||
from core.models import Session, Semester
|
||||
from course.models import Course
|
||||
from result.models import TakenCourse
|
||||
from .decorators import admin_required
|
||||
from .forms import StaffAddForm, StudentAddForm, ProfileUpdateForm, ParentAddForm
|
||||
from .models import User, Student, Parent
|
||||
from .filters import LecturerFilter
|
||||
|
||||
|
||||
def validate_username(request):
|
||||
@ -259,7 +261,8 @@ def edit_staff(request, pk):
|
||||
|
||||
|
||||
@method_decorator([login_required, admin_required], name="dispatch")
|
||||
class LecturerListView(ListView):
|
||||
class LecturerListView(FilterView):
|
||||
filterset_class = LecturerFilter
|
||||
queryset = User.objects.filter(is_lecturer=True)
|
||||
template_name = "accounts/lecturer_list.html"
|
||||
paginate_by = 10 # if pagination is desired
|
||||
|
||||
@ -29,11 +29,9 @@
|
||||
|
||||
<div class="content-center">
|
||||
<form class="search-form" action="" method="get">
|
||||
<input class="au-input" type="text" name="id_no" placeholder="ID No." value="{{ request.GET.id_no }}"/>
|
||||
<input class="au-input" type="text" name="name" placeholder="Name" value="{{ request.GET.name }}"/>
|
||||
<input class="au-input" type="text" name="email" placeholder="Email" value="{{ request.GET.email }}"/>
|
||||
{{ filter.form }}
|
||||
<button class="btn btn-light" type="submit">
|
||||
<i class="fas fa-search"></i> filter
|
||||
<i class="fas fa-search"></i> Filter
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
@ -55,7 +53,7 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for lecturer in object_list %}
|
||||
{% for lecturer in filter.qs %}
|
||||
<tr>
|
||||
<td> {{ forloop.counter }}.</td>
|
||||
<td>{{ lecturer.username }}</td>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user