Paginate Filtered Search - PullRequest
       28

Paginate Filtered Search

0 голосов
/ 28 апреля 2020

У меня есть 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. Есть ли способ сделать это каким-то образом?

...