Reputation: 91
I want to get the data from the dropdown in HTML to the views.py file so that I can get the data from my database on the data which I will get from the dropdown.
first try
error:
Request Method: POST<br/>
Request URL: http://127.0.0.1:8000/admissions/<br/>
Django Version: 2.2.6<br/>
Exception Type: MultiValueDictKeyError<br/>
Exception Value:
'state_dropdown'
Exception Location: C:\django\lib\site-packages\django\utils\datastructures.py in __getitem__, line 80<br/>
Python Executable: C:\django\Scripts\python.exe<br/>
<br/>
Thanks in advance..
forms.py
class state_form(Form):
state_choices = (
("Delhi", "Delhi"),
('west bengal', 'West Bengal'),
("Andhra Pradesh", "Andhra Pradesh"),
("Arunachal Pradesh", "Arunachal Pradesh"),
("Assam", "Assam"), ("Bihar", "Bihar"),
("Chhattisgarh", "Chhattisgarh"),
("Goa", "Goa"),
("Gujarat", "Gujarat"),
("Haryana", "Haryana"),
("Himachal Pradesh", "Himachal Pradesh"),
("Jharkhand", "Jharkhand"),
("Karnataka", "Karnataka"),
("Kerala", "Kerala"),
("Madhya Pradesh", "Madhya Pradesh"),
("Maharashtra", "Maharashtra"),
("Manipur", "Manipur"),
("Meghalaya", "Meghalaya"),
("Mizoram", "Mizoram"),
("Nagaland", "Nagaland"),
("Odisha", "Odisha"),
("Punjab", "Punjab"),
("Rajasthan", "Rajasthan"),
("Sikkim", "Sikkim"),
("Tamil Nadu", "Tamil Nadu"),
("Telangana", "Telangana"),
("Tripura", "Tripura"),
("Uttar Pradesh", "Uttar Pradesh"),
('Uttarakhand', 'Uttarakhand'),
)
state_name=forms.ChoiceField(choices=state_choices)
views.py
def admissions(request):
if request.method == "POST":
a = request.GET['state_dropdown']
print(str(a))
else:
context_dict = {}
return render( request, 'buddyscholarship_html/admissions.html',{})
HTML code
<form class="form-control mb-3" style="margin-top:500px;" method="post">
{% csrf_token %}
<select class="col-lg-7 mb-4 mb-lg-0" name="state_dropdown">
<option value="select your state">select your state</option>
<option value="Uttarakhand">Uttarakhand</option>
<option value="West Bengal">West Bengal</option>
<option value="Andhra Pradesh">Andhra Pradesh</option>
<option value="Arunachal Pradesh">Arunachal Pradesh</option>
<option value="Assam">Assam</option>
<option value="Bihar">Bihar</option>
<option value="Goa">Goa</option>
<option value="Gujarat">Gujarat</option>
<option value="Haryana">Haryana</option>
<option value="Himachal Pradesh">Himachal Pradesh</option>
<option value="Jharkhand">Jharkhand</option>
<option value="Karnataka">Karnataka</option>
<option value="Kerala">Kerala</option>
<option value="Madhya Pradesh">Madhya Pradesh</option>
<option value="Maharashtra">Maharashtra</option>
<option value="Manipur">Manipur</option>
<option value="Meghalaya">Meghalaya</option>
<option value="Mizoram">Mizoram</option>
<option value="Nagaland">Nagaland</option>
<option value="Odisha">Odisha</option>
<option value="Punjab">Punjab</option>
<option value="Rajasthan">Rajasthan</option>
<option value="Sikkim">Sikkim</option>
<option value="Tamil Nadu">Tamil Nadu</option>
<option value="Telangana">Telangana</option>
<option value="Tripura">Tripura</option>
<option value="Delhi">Delhi</option>
<option value="Uttar Pradesh">Uttar Pradesh</option>
</select>
<input type="submit" value="submit" class="btn btn-primary">Search college</input>
</form>
</section>
</div>
then I have tried this:
views.py
def admissions(request):
if request.method == "POST":
a = request.GET.get('state_dropdown')
print(str(a))
else:
context_dict = {}
return render( request, 'buddyscholarship_html/admissions.html',{})
error I am getting
ValueError at /admissions/<br/>
The view buddyscholarship.views.admissions didn't return an HttpResponse object. It returned None instead.<br/>
Request Method: POST<br/>
Request URL: http://127.0.0.1:8000/admissions/<br/>
Django Version: 2.2.6<br/>
Exception Type: ValueError<br/>
Exception Value: <br/>
The view buddyscholarship.views.admissions didn't return an HttpResponse object. It returned None instead.
Upvotes: 0
Views: 253
Reputation: 21
You need to use request.POST instead of request.GET since its a POST request that you are sending. like this..
def admissions(request):
if request.method == "POST":
a = request.POST['state_dropdown']
print(str(a))
else:
context_dict = {}
return render( request, 'buddyscholarship_html/admissions.html',{})
Upvotes: 1
Reputation: 3920
You should use request.POST
dictionary when you are looking for POST
request:
def admissions(request):
if request.method == "POST":
a = request.POST.get('state_dropdown')
print(str(a))
return HttpResponse('POST request')
else:
context_dict = {}
return render( request, 'buddyscholarship_html/admissions.html',{})
and also keep in mind that you should always return a HttpReponse
(or subclasses) not None (the second error is complaining about this).
Upvotes: 0