微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用django-filter和paginate更改页面时如何不删除过滤器

如何解决使用django-filter和paginate更改页面时如何不删除过滤器

我有一个问题,原来我在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 }}">&laquo;</a>
                    </li>
                  {% else %}
                    <li class="page-item disabled">
                      <a class="page-link" href="#" tabindex="-1">&laquo;</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 }}">&raquo;</a>
                    </li>
                  {% else %}
                    <li class="page-item disabled">
                      <a class="page-link" href="#" tabindex="-1">&raquo;</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 举报,一经查实,本站将立刻删除。