Я использую библиотеку django_filters
для фильтрации представлений списка, вот форма фильтра:
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 %}
Часть paginator не отображается, даже когда я использовал paginate_by = 1
, чтобы отладить ее и убедиться, что {% if is_paginated %}
работает