Как я могу заставить пагинацию работать с фильтрацией django?
У меня есть веб-страница с пагинацией, но когда я нажимаю на вторую кнопку, появляются все данные из моей базы данных, я хочу пагинацию только в соответствии с фильтром, который я установил, например, техническое расследование будет отображаться только статус как техническое расследование.
Сортировка по возрастанию работает, но когда я нажимаю на номер детали или другие 3, он показывает все данные из базы данных также, как предотвратить это и показать только базу данных на фильтрации следующего статуса?
Это моя текущая страница, но когда я нажимаю на цифру 2, появляются все данные, и моя фильтрация следующего технического исследования статуса больше не работает.
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)