I have a problem when I want to paginate the filter that I create with django_filter, in my template it shows me the query set and filter but paginate does not work, I would like to know why this happens and if you could help me.
I’ll insert snippets of my code so you can see.
This is my views.py
PD: i have all the necesary imports.
JavaScript
x
15
15
1
@method_decorator(staff_member_required, name='dispatch')
2
class EmployeeListView(ListView):
3
model = Employee
4
paginate_by = 4
5
6
def dispatch(self, request, *args, **kwargs):
7
if not request.user.has_perm('employee.view_employee'):
8
return redirect(reverse_lazy('home'))
9
return super(EmployeeListView, self).dispatch(request, *args, **kwargs)
10
11
def get_context_data(self, **kwargs):
12
context = super().get_context_data(**kwargs)
13
context['filter'] = EmployeeFilter(self.request.GET, queryset = self.get_queryset())
14
return context
15
filters.py
JavaScript
1
11
11
1
import django_filters
2
from .models import Employee, Accident
3
4
class EmployeeFilter(django_filters.FilterSet):
5
6
class Meta:
7
model = Employee
8
fields = {
9
'rutEmployee' : ['startswith']
10
}
11
Advertisement
Answer
You should override get_queryset
.This means you have to put your filter in get_queryset
like this:
JavaScript
1
19
19
1
@method_decorator(staff_member_required, name='dispatch')
2
class EmployeeListView(ListView):
3
model = Employee
4
paginate_by = 4
5
6
def dispatch(self, request, *args, **kwargs):
7
if not request.user.has_perm('employee.view_employee'):
8
return redirect(reverse_lazy('home'))
9
return super(EmployeeListView, self).dispatch(request, *args, **kwargs)
10
11
def get_context_data(self, **kwargs):
12
context = super().get_context_data(**kwargs)
13
context['filter'] = EmployeeFilter(self.request.GET, queryset = self.get_queryset())
14
return context
15
16
def get_queryset(self):
17
queryset = super().get_queryset()
18
return EmployeeFilter(self.request.GET, queryset=queryset).qs
19
and use object_list
instead of filter
in employee_list.html like this:
JavaScript
1
2
1
{% for employee in object_list|dictsort:"id" reversed %}
2