Как я могу сохранить результат поиска в диапазоне дат в представлениях и пагинации 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

Вернуться на верх