У меня есть search form
для пользователей на моей странице. На самом деле это метод form
с POST
, который получает все вставленные параметры из POST
в моей функции и на основе этих параметров (проверяет, какие параметры были заполнены в форме), выполняя поиск в моем database
и отправляя его обратно. пользователю, подобному этому (searched data
выбирается query set
на основе поиска пользователей)
paginator = Paginator(searched_data, 15)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request, 'online_db/terema_kensaku.html', {'page_obj': page_obj})
, который работает нормально, но у него есть одна проблема. Это ВСЕ происходит в моей функции в
if request.method == "POST":
И, конечно, если пользователь нажимает кнопку NEXT PAGE
для этих найденных данных, он выполняет действие GET
, поэтому данных нет - нет NEXT PAGE
, Даже если я попытаюсь сделать то же самое в
if request.method == "GET":
, это невозможно, потому что я не могу получить от пользователей parameters
(форма POST
) для выполнения database filtering
для всех данных из базы данных. Мой views.py
слишком длинный с большим количеством параметров и переменных, поэтому я не буду его вставлять, но сейчас он работает следующим образом.
def terema_kensaku(request):
if request.method == "POST":
search_data = []
search_list = []
# get data from form
kaisha = request.POST.get("company_name", "")
denwa_bangou = request.POST.get("phone", "")
# My data have `updated versions` of columns - new version of same columns in another part of code
# so I have a reasons for filtering like this
# Also I have no clue which data will be filled by users and which not(in form)
if len(kaisha) > 1:
search_list.append("company_name")
if len(denwa_bangou) > 1:
search_list.append("phone")
for col in search_list:
if col == "company_name":
if not searched_data:
searched_data = OnlineDB.objects.filter(search_filter([col], kaisha))
else:
searched_data = searched_data.filter(search_filter([col], kaisha))
if col == "phone":
if not searched_data:
searched_data = OnlineDB.objects.filter(phone=denwa_bangou)
else:
searched_data = searched_data.filter(phone=denwa_bangou)
# .... and so on
paginator = Paginator(searched_data, 15)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request, 'online_db/terema_kensaku.html', {'page_obj': page_obj})
Все это происходит под POST
, но У меня нет шансов выполнить это под моим GET
, потому что я не получаю те же параметры от form
пользователем, когда пользователь нажимает кнопку NEXT PAGE
на paginator object
. Есть ли способ сделать это каким-то образом?