Как сделать пагинацию в django для отфильтрованных данных

Мне нужно получить только те данные, которые я отфильтровал et_records_by_date = Scrapper.objects.all().filter(Q(start_time__date=f_date)|Q(end_time__date=t_date)) в пагинации. Но когда я нажимаю на следующую страницу, она показывает другие данные. Есть ли какое-нибудь решение, чтобы получить только данные для определенного запроса. Когда я размещаю данные по датам, 1-я страница показывает правильные данные, но когда я нажимаю на 2-ю страницу, она показывает другие данные

Когда вы нажимаете на "следующую страницу", вы выполняете GET-запрос, а не POST-запрос. Это означает, что он перейдет в блок else, который не имеет фильтрации, а просто возвращает все объекты Scrapper.

Вам лучше включить from_date и to_date в GET запрос и не использовать POST запрос.

Если вы используете форму, вы можете просто установить метод:

<form method="GET" action="..." />

Общий метод

def paginate(request,obj,total=25):
    paginator = Paginator(obj,total)    
    try:
        page = int(request.GET.get('page', 1))
    except:
        page = 1

    try:
        obj_list = paginator.page(page)
    except(EmptyPage,InvalidPage):
        obj_list = paginator.page(paginator.num_pages)
    return obj_list

Вид

users = UserInfo.objects.all()
data = {
    'users': paginate(request,users,15),
}
return render(request,self.template_name,data)

HTML

{% include './pagination.html' with obj=users %}

файл pagination.html

    {% if obj.paginator.num_pages > 1 %}
        <div class="text-center">
            <ul class="pagination">
    
                <li class="{% if not obj.has_previous %} disabled{% endif %}">
                

    {% if obj.has_previous %}
                <a data-page="{{obj.previous_page_number}}" href="?page={{obj.previous_page_number}}{% for key, value in request.GET.items %}{% if key != 'page' %}&{{ key }}={{ value }}{% endif %}{% endfor %}" aria-label="{% trans 'Previous' %}" tabindex="-1"> &laquo; </a>
                {% else %}
                    <a data-page="0" class="" href="javascript:void(0);" tabindex="-1">&laquo;</a>
                {% endif %}
            </li>
            
            {% for i in obj.paginator.page_range %}
                {% if obj.number == i %}
                    <li class="active">
                        <a data-page="0" class="" href="javascript:void(0)">{{ i }}</a>
                    </li>
                {% elif i > obj.number|add:'-5' and i < obj.number|add:'5' %}
                    <li class=""><a data-page="{{i}}" class="" href="?page={{i}}{% for key, value in request.GET.items %}{% if key != 'page' %}&{{ key }}={{ value }}{% endif %}{% endfor %}">{{ i }}</a>
                    </li>
                {% endif %}
            {% endfor %}

            <li class="{% if not obj.has_next %} disabled{% endif %}">
                {% if obj.has_next %}
                    <a data-page="{{ obj.next_page_number }}" class="" href="?page={{obj.next_page_number}}{% for key, value in request.GET.items %}{% if key != 'page' %}&{{ key }}={{ value }}{% endif %}{% endfor %}" tabindex="-1">&raquo;</a>
                {% else %}
                    <a data-page="0" class="" href="javascript:void(0);" tabindex="-1">&raquo;</a>
                {% endif %}
            </li>
        </ul>
    </div>
{% endif %}
Вернуться на верх