【问题标题】:Trying to get the data from the dropdown list into views.py file in django试图从下拉列表中获取数据到 django 中的 views.py 文件中
【发布时间】:2019-12-04 11:16:23
【问题描述】:

我想从 HTML 中的下拉列表中获取数据到 views.py 文件,以便我可以从我的数据库中获取我将从下拉列表中获取的数据的数据。

第一次尝试

错误:

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/>

提前谢谢..

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 代码

    <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>

那我试过了:

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',{})

我遇到的错误

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/>  

视图 buddyscholarship.views.admissions 未返回 HttpResponse 对象。而是返回 None。

【问题讨论】:

    标签: django django-forms django-views


    【解决方案1】:

    您需要使用 request.POST 而不是 request.GET,因为它是您发送的 POST 请求。像这样..

    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',{})
    

    【讨论】:

      【解决方案2】:

      在查找POST 请求时应使用request.POST 字典:

      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',{})
      

      还要记住,您应该始终返回 HttpReponse(或子类)而不是 None(第二个错误是抱怨这个)。

      【讨论】:

      • @umairnsr87 很高兴为您提供帮助 :) 还请将答案标记为已接受,以便参考。
      猜你喜欢
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多