Я всегда ничего не получаю из request.POST.get в Django - PullRequest
1 голос
/ 23 октября 2019

nam и mob field - поля userinput, которые я использую для пользовательского ввода, а позже я использую их для фильтрации

{% block content %}
<form class="form-signin" action="" method="POST">
        {% csrf_token %}
<div class="mb-3">
        <input type="text" name="nam" id="nam"  class="form-control-sm center-block" placeholder="Nam" autofocus>
    </div>
    </div>  
    <div class="mb-3">                                               
        <select class="custom-select center-block" name="mob" id="mob" >
        <option>{{ customer.sponsor }}</option>
        {% for i in sponsor %}
        <option value="{{ i.mobile }}"> {{ i.mobile|add:' - '|add:i.name }} </option>
        {% endfor %} 
        </select>        
        <div class="invalid-feedback">
        Please select a valid Existing Customer.
        </div>
    </div>                   
    <div class="mb-3">
            <a href="{% url 'customer_view' %}" class="btn btn-primary btn-sm" role = "button">Search</a>

Urls.py

path('customer_view',views.customer_view,name='customer_view')

Views.py

def customer_view(request):
    print(request.method )  
    name1 = str(request.POST.get('nam'))  
    print(name1) 
    mobile1 = str(request.POST.get('mob'))
    print(mobile1)    
    customers_list = customer.objects.filter(
    mobile=mobile1) & customer.objects.filter(name=name1)
    sponsors = customer.objects.all().distinct('mobile')
    ctx = { 'customer': customers_list, 'sponsor': sponsors } 
    return render(request, 'pages/customer_view.html', ctx)

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Вы используете href, который не отправляет форму. Вам нужна кнопка submit и измените action вашей формы на ваш URL для просмотра. Попробуйте это:

{% block content %}
<form class="form-signin" action="{% url 'customer_view' %}" method="POST">
        {% csrf_token %}
<div class="mb-3">
        <input type="text" name="nam" id="nam"  class="form-control-sm center-block" placeholder="Nam" autofocus>
    </div>
    </div>  
    <div class="mb-3">                                               
        <select class="custom-select center-block" name="mob" id="mob" >
        <option>{{ customer.sponsor }}</option>
        {% for i in sponsor %}
        <option value="{{ i.mobile }}"> {{ i.mobile|add:' - '|add:i.name }} </option>
        {% endfor %} 
        </select>        
        <div class="invalid-feedback">
        Please select a valid Existing Customer.
        </div>
    </div>                   
    <div class="mb-3">
            <input type="submit" value="Search"/>
.
.
...
1 голос
/ 23 октября 2019

В вашей форме вы пишете кнопку как:

<a href="{% url 'customer_view' %}" class="btn btn-primary btn-sm" role="button">Search</a>

Но это означает, что это просто ссылка, которая ссылается на новую страницу. В результате браузер отправит (пустой) запрос GET на указанный URL-адрес и никогда не отправит форму.

Вы можете создать кнопку, которая отправляет форму с помощью:

<form class="form-signin" action="<b>{% url 'customer_view' %}</b>" method="post">
    <!-- &hellip; -->
    <button <b>type="submit"</b> class="btn btn-primary btn-sm" role="button">Search</button>
    <!-- &hellip; -->
</form>
* 1008Как говорится, поиск часто выполняется с помощью запроса GET, поэтому вы можете изменить method="<b>get</b>" и получить параметры через request.GET.get(..).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...