问题描述
我有一个问题,原来我在ListView中使用django_filter进行了过滤,情况是该过滤器工作正常,但是当执行的搜索结果超过4个时(我的paginate_by = 4),并且想要转到第2页,过滤器将被删除,并显示所有内容,就像过滤开始时一样,我将附加我的代码和图像,以便您查看。
我的views.py
@method_decorator(staff_member_required,name='dispatch')
class EmployeeListView(ListView):
model = Employee
paginate_by = 4
def dispatch(self,request,*args,**kwargs):
if not request.user.has_perm('employee.view_employee'):
return redirect(reverse_lazy('home'))
return super(EmployeeListView,self).dispatch(request,**kwargs)
def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs)
context['filter'] = EmployeeFilter(self.request.GET,queryset = self.get_queryset())
return context
def get_queryset(self):
queryset = super().get_queryset()
return EmployeeFilter(self.request.GET,queryset=queryset).qs
filter.py
import django_filters
from .models import Employee,Accident
class EmployeeFilter(django_filters.FilterSet):
class Meta:
model = Employee
fields = {
'rutEmployee' : ['startswith']
}
我的employee_list.html
{% extends 'core/base.html' %}
{% load bootstrap %}
{% load static %}
{% block title %}EMPLEADOS{% endblock %}
{% block content %}
<main role="main">
<div class="row">
<div class="col-md-12 stretch-card">
<div class="card">
<div class="card-body">
<p class="card-title">Lista de Empleados</p>
<div class="table-responsive">
<form method="GET">
{{ filter.form|bootstrap }}
<button type="submit" class="btn btn-primary">Filtrar</button>
</form>
<hr>
<table class="table table-bordered">
<thead>
<tr>
<th>Rut</th>
<th>Nombre</th>
<th>Apellido Paterno</th>
<th>Detalle</th>
</tr>
</thead>
<tbody>
{% for employee in object_list|dictsort:"id" reversed %}
<tr>
<td>{{employee.rutEmployee}}</td>
<td>{{employee.nameEmployee}}</td>
<td>{{employee.apPatEmployee}}</td>
<td><p><a href="{% url 'employee:employee' employee.id employee.nameEmployee|slugify %}">Detalle</a></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<br>
{% if is_paginated %}
<nav aria-label="Page navigation">
<ul class="pagination justify-content-center">
{% if page_obj.has_prevIoUs %}
<li class="page-item ">
<a class="page-link" href="?page={{ page_obj.prevIoUs_page_number }}">«</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1">«</a>
</li>
{% endif %}
{% for i in paginator.page_range %}
<li class="page-item {% if page_obj.number == i %}active{% endif %}">
<a class="page-link" href="?page={{ i }}">{{ i }}</a>
</li>
{% endfor %}
{% if page_obj.has_next %}
<li class="page-item ">
<a class="page-link" href="?page={{ page_obj.next_page_number }}">»</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1">»</a>
</li>
{% endif %}
</ul>
</nav>
{% endif %}
</div>
</div>
</div>
</div>
</main>
{% endblock %}
我的url.py
from django.urls import path
from . import views
from .views import EmployeeListView,EmployeeDetailView,EmployeeCreate,EmployeeUpdate,EmployeeDelete
employee_patterns = ([
#Path de las vistas
path('',EmployeeListView.as_view(),name="employees"),path('<int:pk>/<slug:slug>/',EmployeeDetailView.as_view(),name="employee"),#Path de los create
path('create/',EmployeeCreate.as_view(),name="create"),#Path de los update
path('update/<int:pk>/',EmployeeUpdate.as_view(),name="update"),#Path de los delete
path('delete/<int:pk>/',EmployeeDelete.as_view(),name="delete"),],'employee')
显示其解释的图像
第一张图片:浏览器中的url:127.0.0.1:8000/employee/ Unfiltered
第二张图片:浏览器中的url:127.0.0.1:8000/employee/?rutEmployee__startswith=19 With Filter
第三张图片:浏览器中的ulr:127.0.0.1:8000/employee/?page=2“ Page change and the filter is cleared showing all employees
我需要防止删除过滤器,并且当我更改页面时,请继续打开过滤器。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)