MultiValueDictKeyError во время отправки формы - PullRequest
0 голосов
/ 24 февраля 2020

Ранее я проверил, что есть несколько двойных имен, но я проверил все и все еще получаю MultiValueDictKeyError в idcard, я не знаю, что вызывает эту ошибку, как только я отправляю форму, я получаю эту ошибку.

<body ng-app="">
{% extends "pmmvyapp/base.html" %}
{% load crispy_forms_tags %}
{% load static %}
{% block content%}
<div class="col-md-8">
  <form method="post" action="/personal_detail/">
  {% csrf_token %}
  <div class="form-group">
      <div class=" mb-4">
      <h6><u>(*Mandatory Fields)Please Fill up the details below </u></h6>
    </div>
    <legend class="border-bottom mb-4" ,align="center">1.Beneficiary Details</legend>
    <label for="formGropuNameInput">Does Beneficiary have an Adhaar Card?*</label>
    <input type="radio" name="showHideExample" ng-model="showHideTest" value="true">Yes
    <input type="radio" name="showHideExample" ng-model="showHideTest" value="false">No
   <!--logic for yes-->
    <div ng-if="showHideTest=='true'">
      <div class="form-group">
        <label for="formGropuNameInput">Name of Beneficiary(as in Aadhar Card)*</label>
        <input name="beneficiary_adhaar_name" class="form-control" id="formGroupNameInput" placeholder="Enter name of Beneficiary as in Aadhar Card" required>
      </div>


      <div class="form-group">
        <label for="formGropuNameInput">Aadhaar Number(Enclose copy of Aadhaar Card)*:</label>
        <input name="adhaarno" class="form-control" id="aadhar" pattern="^\d{4}\s\d{4}\s\d{4}$"  placeholder="Enter Aadhar Card number with proper spacing" required>
        </div>

      <!--<div class="custom-file">
        <input type="file" class="custom-file-input" id="customFile" name="adhaaarcopy">
        <label class="custom-file-label" for="customFile">Choose file</label>
      </div>--> 
    </div>
    <!--logic for no-->
    <div ng-if="showHideTest=='false'">     
      <div class="form-group">
        <label for="formGroupDistrict">Please provide any of the following Identity Card*:</label>
        <select name="idcard" id="formGroupDistrict" required>
          <option>Bank or Post Office photo passbook</option>
          <option>Voter ID Card</option>
          <option>Ration Card</option>
          <option>Kishan Photo Passbook</option>
          <option>Passport</option>
          <option>Driving License</option>
          <option>PAN Card</option>
          <option>MGNREGS Job Card</option>
          <option>Her husband's Employee Photo Identity Card issued by the government
           or any Public Sector Undertaking</option>
          <option>Any other Photo Identity Card issued by State Government or Union Territory Administrations</option>
          <option>Certificate of Identity with photograph issued by a Gazetted Officer on Official letterhead</option>
          <option>Health Card issued by Primary Health Centre(PHC) or Government Hospital</option>
          <option>Any other document specified by the State Government or Union Territory Adminstration</option>
        </select>
        </div>

        <div class="form-group">
          <label for="adhaar_eid">Aadhaar Enrollment ID(EID):</label>

          <input name="adhaar_eid" class="form-control" id="aadhar"
                   placeholder="Enter Aadhar Enrollment ID">
          </div>        
        <div class="form-group">        
          <label for="formGropuNameInput">Name of Beneficiary(as in Identity Card)* </label>
          <input name="beneficiary_id_name" class="form-control" id="formGroupNameInput" placeholder="Enter your name" required>
        </div>


        <div class="form-group">
          <label for="idno">Identity Number(Enclose Copy of Identity Card)*:</label>

          <input name="idno" id="identityno"  class="form-control"               
                 required>
          </div>

       <!-- <div class="custom-file">

            <input type="file" class="custom-file-input" name="idcopy" id="customFile">
            <label class="custom-file-label" for="customFile">Choose file</label>
          </div>-->
    </div>
    </div>
    <button type="submit" class="btn btn-primary" style="margin-bottom:10px ">Submit</button>
  </form>
</div>   
{% endblock %}
</body>

я также проверил views.py

def ApplyOnline(request):
    return render(request,'users/applyonline.html')
@login_required
def personal_detail(request):
   # ShowHideExample = request.POST.get('showHideExample',False)
    beneficiary_adhaar_name=request.POST['beneficiary_adhaar_name']
    adhaarno=request.POST['adhaarno']
   # adhaarcopy =request.POST['adhaarcopy']

    idcard=request.POST['idcard']
    adhaar_eid=request.POST['eid']    
    beneficiary_id_name=request.POST['beneficiary_id_name']
    idno=request.POST['idno']
   # idcopy=request.POST['idcopy']
    apply_online = Personal_Detail(beneficiary_adhaar_name=beneficiary_adhaar_name,adhaarno=adhaarno,
    idcard=idcard,adhaar_eid=adhaar_eid,beneficiary_id_name=beneficiary_id_name,idno=idno)
    apply_online.save()
    return render(request,'users/applyonline.html')

это мои models.py


class Personal_Detail(models.Model):
    beneficiary_adhaar_name=models.CharField(max_length=30)
    adhaarno=models.IntegerField()
    adhaarcopy = models.ImageField(upload_to='adhaar/')

    idcard=models.TextField()
    adhaar_eid=models.IntegerField()    
    beneficiary_id_name=models.CharField(max_length=30)
    idno=models.IntegerField()
    idcopy=models.ImageField(upload_to='identitycard/')

    def __str__(self):
        return self.beneficiary_adhaar_name + self.beneficiary_id_name

Я не знаю, что вызывает эту ошибку Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

Вы не должны извлекать значения из request.POST путем подписки, поскольку ключ может отсутствовать. Вы всегда должны использовать get() следующим образом:

request.POST.get('idcard')

Причина, по которой вы не получаете никакого значения для idcard, заключается в том, что ваши теги <option> не имеют значений, поэтому отправлять нечего:

<option value="1">Bank or Post Office photo passbook</option>

Но было бы проще, если бы вы использовали Django форму , чтобы вам не приходилось беспокоиться об этих вещах. Также это позволит вам проверить данные перед сохранением.

0 голосов
/ 24 февраля 2020

Попробуйте распечатать request.POST QueryDict. MultiValueDictKeyError возникает, когда ключ, который вы пытаетесь получить, отсутствует в словаре.

Я предлагаю вместо этого использовать idcard=request.POST.get['idcard']; таким образом, если ключ отсутствует в QueryDict, он вернет None вместо выдачи ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...