Как использовать выпадающий список и пагинацию без сброса значений при переходе вперед и назад по страницам в DJANGO?

У меня есть форма с выпадающими значениями для поиска. Выпадающие значения помогают искать определенное имя хоста (значение поля в elasticsearch).

Когда я перехожу вперед и назад по страницам, используя значение выпадающего списка по умолчанию, я не получаю никаких ошибок. Но когда я нахожусь на странице 2/5 (для значения выпадающего списка по умолчанию) и затем ищу новое имя хоста, мой url возвращает http://localhost:8000/?page=2 и новое имя хоста в моем views.py, что не то, что я хочу.

<

VIEWS.PY

def check(request):
  if request.method == 'POST':
    host = request.POST['host']
    rows = []
    query = { 
      "sort": {"@timestamp": {"order": "desc"}},
      "size" : 10,
    "_source": ["data.service","data.policyid","data.srcuser"], 
    "query":{
      "bool": {
        "must": [
          {"match_phrase": {"data.action": "deny"}},
          {"match_phrase": {"data.devname": host}}
        ]
      }
    }
  }
    
    index_name = "mssp-stl.archives-2022.04.13"
    rel = es.search(index=index_name, body= query)
    data = rel['hits']['hits']
    for i in data:
      row = {
        'policyid' : i['_source']['data']['policyid'],
        'service' : i['_source']['data']['service']
      }
      rows.append(row)
    data = pd.DataFrame(rows)
    
    p = Paginator(rows, 2)
    page = request.GET.get('page')
    venues = p.get_page(page)

    return render(request, 'firewall_analyser/test.html',
    {
      'rows': rows,
      'venues': venues,
      'hosts':names,
      'host': host
    }
    )
  else:
    
    rows = []
    query = { 
      "size" : 10,
      "sort": {"@timestamp": {"order": "desc"}},
    "_source": ["data.service","data.policyid","data.srcuser"], 
    "query":{
      "bool": {
        "must": [
          {"match_phrase": {"data.action": "deny"}},
          {"match_phrase": {"data.devname": "FGT100E-MUMDC-Secondary"}}
        ]
      }
    }
  }
    index_name = "mssp-stl.archives-2022.04.13"
    rel = es.search(index=index_name, body= query)
    data = rel['hits']['hits']
    for i in data:
      row = {
        'policyid' : i['_source']['data']['policyid'],
        'service' : i['_source']['data']['service']
      }
      rows.append(row)
    data = pd.DataFrame(rows)
    
    p = Paginator(rows, 2)
    page = request.GET.get('page')
    venues = p.get_page(page)
    
    return render(request, 'firewall_analyser/test.html',
    {
      'rows': rows,
      'venues': venues,
      'hosts':names,
      'host': "FGT100E-MUMDC-Secondary"
    }
    )

Когда я перехожу на следующую или предыдущую страницу, мой код всегда переходит к оператору else (метод GET), где имя хоста является жестко закодированным значением, и все мои результаты в таблице неверны.

pagination.html

<script>
     window.onload = function exampleFunction() {
        var host = '{{host}}'
        if (host){
            $("#host").val(host).change();
        }
     }
</script>
<body>
    <form method="POST" class="form-inline" id ='post-form' action="">
        {% csrf_token %}
        <div class="form-group">
            <label class="form-check-label"><b style="color: #141313;">Host </b></label>
            <select name="host" id="host">

                {% for i in hosts %} 
                <option value={{i}}>{{i}}</option>
                {% endfor%}
            </select>
        </div>&nbsp;
        <div class="form-group">
            <label class="form-check-label">&nbsp;</label>
            <button type="submit" class="btn styled btn-Fetch"><b>Search</b></button>
        </div>
    </form>
    <table>
        <th>idno</th>
        <th>Policy ID</th>
        <th>Service</th>
    {%  for i in venues %}
    <tr>
        <td>{{ forloop.counter }}</td>
        <td> {{i.policyid}}</td>
        <td>{{i.service}}</td>
    </tr>
    {% endfor %}
    </table>
<hr> <br/><br/>
{{venues}} <br/>
Has Previous : {{venues.has_previous}} <br/>
Has Next : {{venues.has_next}}<br/>
Current Page : {{venues.number}}<br/>
Number of pages : {{venues.paginator.num_pages}}

<hr> <br/><br/>
{% if venues.has_previous %}
    <a href="?page=1">First Page</a>
    <a href="?page={{venues.previous_page_number}}">Previous</a>
{% endif %}

{% if venues.has_next %}
    <a href="?page={{venues.next_page_number}}">Next</a>
    <a href="?page={{venues.paginator.num_pages}}">Last</a>
{% endif %}
</body>


</html>

Как решить проблему, при которой значение имени хоста не сбрасывается, а при переходе по страницам назад и вперед я получаю последовательные значения искомого имени хоста?

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