Как я могу заставить пагинацию работать с фильтрацией django?

У меня есть веб-страница с пагинацией, но когда я нажимаю на вторую кнопку, появляются все данные из моей базы данных, я хочу пагинацию только в соответствии с фильтром, который я установил, например, техническое расследование будет отображаться только статус как техническое расследование.

Сортировка по возрастанию работает, но когда я нажимаю на номер детали или другие 3, он показывает все данные из базы данных также, как предотвратить это и показать только базу данных на фильтрации следующего статуса?

Это моя текущая страница, но когда я нажимаю на цифру 2, появляются все данные, и моя фильтрация следующего технического исследования статуса больше не работает.

enter image description here enter image description here

views.py

@login_required()
def investigation(request):
    search_post = request.GET.get('q')
    # Code for the users to search for reception, partno, serialno, mconum, customername
    if (search_post is not None) and search_post:
        allusername = Photo.objects.filter(Q(reception__icontains=search_post) | Q(partno__icontains=search_post) | Q(
            Customername__icontains=search_post) | Q(mcoNum__icontains=search_post) | Q(
            serialno__icontains=search_post))
        if not allusername:
            allusername = Photo.objects.all().order_by("-Datetime")


    else:
        allusername = Photo.objects.all().filter(Q(nextstatus='Technical Investigation')).order_by("-Datetime")

    # Sort BY:
    part = request.GET.get('sortType')
    valid_sort = ["partno", "serialno", "Customername", "mcoNum"]  # Sort the workshop data in ascending order acording to the part number, serial number, customer name and the MCO Number
    if (part is not None) and part in valid_sort:
        allusername = allusername.order_by(part)

    page = request.GET.get('page')
    paginator = Paginator(allusername, 10)  # 1 page will only show 10 data, if more than 10 data it will move it to the next page.
    try:
        allusername = paginator.page(page)
    except PageNotAnInteger:
        allusername = paginator.page(1)
    except EmptyPage:
        allusername = paginator.page(paginator.num_pages)

    context = {'allusername': allusername, 'query': search_post, 'order_by': part}
    return render(request, 'workshop/investigation.html', context)

investigation.html

проблема находится внутри вашего views.py. Вы можете вызвать allusername = allusername.filter(Q(nextstatus__icontains='Technical Investigation')) перед вызовом Padignator после создания всей остальной логики и сортировки попробовать это.

@login_required()
def investigation(request):
    search_post = request.GET.get('q')
    # Code for the users to search for reception, partno, serialno, mconum, customername
    if (search_post is not None) and search_post:
        allusername = Photo.objects.filter(Q(reception__icontains=search_post) | Q(partno__icontains=search_post) | Q(
            Customername__icontains=search_post) | Q(mcoNum__icontains=search_post) | Q(
            serialno__icontains=search_post))
        if not allusername:
            allusername = Photo.objects.all().order_by("-Datetime")


    else:
        allusername = Photo.objects.all().order_by("-Datetime")

    # Sort BY:
    part = request.GET.get('sortType')
    valid_sort = ["partno", "serialno", "Customername", "mcoNum"]  # Sort the workshop data in ascending order acording to the part number, serial number, customer name and the MCO Number
    if (part is not None) and part in valid_sort:
        allusername = allusername.order_by(part)

    page = request.GET.get('page')
    allusername = allusername.filter(Q(nextstatus__icontains='Technical Investigation')) # new
    paginator = Paginator(allusername, 10)  # 1 page will only show 10 data, if more than 10 data it will move it to the next page.
    try:
        allusername = paginator.page(page)
    except PageNotAnInteger:
        allusername = paginator.page(1)
    except EmptyPage:
        allusername = paginator.page(paginator.num_pages)

    context = {'allusername': allusername, 'query': search_post, 'order_by': part}
    return render(request, 'workshop/investigation.html', context)
Вернуться на верх