Как я могу сохранить результат поиска в диапазоне дат в представлениях и пагинации Django
У меня есть запрос на поиск по диапазону дат с общим результатом, который отображается в шаблонах django с помощью цикла в таблице с пагинацией. И каждый раз, когда результат диапазона дат превышает одну страницу и я нажимаю на следующую страницу, на следующей странице отображается весь список запросов, который был инициализирован сначала в представлениях, теряя тем самым весь результат диапазона дат.
Вот мой код представления:
def SearchIncomeRange(request):
listIncome = Income.objects.all()
searchForm = IncomeSearchForm(request.POST or None)
if request.method == 'POST':
listIncome = Income.objects.filter(date__range=[searchForm['start_date'].value(),
searchForm['end_date'].value()
]
)
else:
searchForm = IncomeSearchForm()
paginator = Paginator(listIncome, 5)
page = request.GET.get('page')
paged_listIncome = paginator.get_page(page)
#Calculate total amount of Date Range Result
total = listIncome.aggregate(total = Sum('amount')).get('total') or 0
context = {
'listIncome':paged_listIncome,
'searchForm':searchForm,
'total':total,
}
return render(request, 'cashier/search_income_range.html', context)
Если вы посмотрите на код очень хорошо, первый запрос извлекает весь доход, в то время как второй запрос в операторе if выполняет поиск по диапазону дат, и каждый раз, когда я нажимаю на следующую страницу в шаблоне, возвращается результат первого запроса для всего списка доходов, а не отображаются только записи на следующей странице. Спасибо за ваши ожидаемые ответы.
Это происходит потому, что при изменении страницы вы не отправляете POST-запрос. Поэтому вся ваша функция не будет работать. Paginator создан для создания одной страницы с пагинацией внутри, а не для создания функции типа запроса
def SearchIncomeRange(request):
searchForm = IncomeSearchForm(request.POST or None)
if searchForm:
listIncome = Income.objects.filter(date__range=[searchForm['start_date'].value(),searchForm['end_date'].value()])
else:
listIncome = Income.objects.all()
paginator = Paginator(listIncome, 5)
page = request.GET.get('page')
paged_listIncome = paginator.get_page(page)
#Calculate total amount of Date Range Result
total = listIncome.aggregate(total =
Sum('amount')).get('total') or 0
context = {
'listIncome':paged_listIncome,
'searchForm':searchForm,
'total':total,
}
return render(request, 'cashier/search_income_range.html',context)
просто измените логику поиска POST на поиск наличия FORM