首页 > 解决方案 > 在 django 中将 Django_filter 和分页添加到 FilterView 类

问题描述

我正在使用django_filterslib 来过滤我的列表视图,这是过滤器形式:

class WorkerFilter(django_filters.FilterSet):
    class Meta:
        model = Worker
        fields = ['id', 'branch']

这是视图的外观:

class WorkerListView(FilterView):
    model = Worker
    paginate_by = 1
    filter_class = WorkerFilter
    template_name = 'erp_system/worker_list.html'
    filterset_fields = ['id', 'branch']

    def get_queryset(self):
        new_context = Worker.objects.filter(
            active=True,
        )
        return new_context

并以这种方式使用 HTML 模板中的表单:

   <form action="" method="get">
    {{ filter.form.as_p}}
        <button class="btn btn-warning" type="submit"><span class="fa fa-search"></span> بحث </button>
</form>

在这个 HTML 页面的末尾,我有这样的列表和分页器:

        {% for item in filter.qs %}
{{item}}<br>
{% endfor %}
        {% if is_paginated %}
        <div class="pagination">
            <span class="page-links">
                {% if page_obj.has_previous %}
                    <a href="?page={{ page_obj.previous_page_number }}"><button class="btn-success">الصفحة السابقة</button> </a>
                {% endif %}
                <span class="page-current">
                     صفحة رقم  {{ page_obj.number }} من {{ page_obj.paginator.num_pages }}.
                </span>
                {% if page_obj.has_next %}
                    <a href="?page={{ page_obj.next_page_number }}"><button class="btn-success">الصفحة التالية</button> </a>
                {% endif %}
            </span>
        </div>
    {% endif %}

分页器部分没有显示,即使我曾经paginate_by = 1调试它并确保它{% if is_paginated %}有效

标签: djangofilterpagination

解决方案


推荐阅读