2017-10-04 45 views
0

我有一个表单,并且它工作正常。但是当在模型django中添加新字段时提出错误总是在Django表单上得到“此字段是必需的”错误

当我运行服务器并单击提交时,它显示新字段的错误该字段是必需的虽然我在表单中为该字段提供数据。

Model.py

class UserInformation(models.Model): 
firstName     = models.CharField(max_length=128) 
lastName     = models.CharField(max_length=128) 
userName     = models.CharField(max_length=128) 
institution     = models.CharField(choices = [("@xyz.org","XYZ"), ("@abc.edu","ABC")], max_length=128) 
userEmail     = models.CharField(default="N/A", max_length=128) 
phoneNumber     = models.CharField(max_length=128)  
orchidNumber    = models.CharField(max_length=128) 
PI       = models.CharField(max_length=128) 
PIUsername     = models.CharField(max_length=128) 
PIInstitution    = models.CharField(default="N/A",choices = [("@xyz.org","XYZ"), ("@abc.edu","ABC")], max_length=128) 
PIEmail      = models.CharField(default="N/A", max_length=128) 
PIPhoneNumber    = models.CharField(max_length=128) 

在这个模型中

PIEmail is the field which I have added. 

forms.py

class UserInformationForm(ModelForm): 
firstName = forms.CharField(max_length=254, 
          widget=forms.TextInput({ 
           'class': 'form-control', 
           })) 
lastName = forms.CharField(
          widget=forms.TextInput({ 
           'class': 'form-control', 
           })) 
userName = forms.CharField(
          widget=forms.TextInput({ 
           'class': 'form-control', 
           })) 

institution = forms.ChoiceField(choices = [("@xyz.org","XYZ"), ("@abc.edu","ABC")] 
           ,widget=forms.Select({         
           'class': 'form-control', 
           })) 


phoneNumber = forms.CharField(required=False, 
          widget=forms.TextInput({ 
           'class': 'form-control', 
           })) 
orchidNumber = forms.CharField(required=False, 
          widget=forms.TextInput({ 
           'class': 'form-control', 
           }))         

PI = forms.CharField(
          widget=forms.TextInput({ 
           'class': 'form-control', 
           })) 
PIUsername = forms.CharField(
          widget=forms.TextInput({ 
           'class': 'form-control', 
           })) 
ctsaPIInstitution = forms.ChoiceField(choices = [("@xyz.org","XYZ"), ("@abc.edu","ABC")] 
           ,widget=forms.Select({         
           'class': 'form-control', 
           })) 

PIPhoneNumber = forms.CharField(
          widget=forms.TextInput({ 
           'class': 'form-control', 
           })) 

userEmail = forms.CharField(required=False, 
          widget=forms.TextInput({ 
           'class': 'form-control', 
           })) 

PIEmail = forms.CharField(required=False, 
          widget=forms.TextInput({ 
           'class': 'form-control', 
           })) 





class Meta: 
    model = UserInformation 
    exclude =() 

,这里是我的register.html

<div class="row"> 
    <section id="registerForm"> 
     <div style="font-size:15px; color:red;"> 
      The fields marked with an asterisk (*) are mandatory. 
     </div><br/>  
      <form method="post" action=".">{% csrf_token %} 
      <div class="form-group"> 
        <label for="id_firstName" >First Name (*)</label> 
         {{ form.firstName }} 
      </div> 
      <div class="form-group"> 
        <label for="id_lastName" >Last Name (*)</label>      
         {{ form.lastName }}      
      </div> 
      <div class="form-group"> 
        <label for="id_email">Username (*)</label>      
         {{ form.userName }} 
      </div> 
         <div class="form-group"> 
        <label for="id_intitution">Institution (*)</label> 

         {{ form.institution }} 
      </div> 
      <div class="form-group"> 
        <label for="id_phone" >Contact Number</label> 
         {{ form.phoneNumber }} 
      </div> 
      <div class="form-group"> 
        <label for="id_orcid">Orcid ID (<a href="https://orcid.org/register">Get Orcid ID</a>)</label> 
         {{ form.orchidNumber }} 
      </div> 

      <div class="form-group">   
       <label for="id_ctsaPI">Prinicipal Investigator (*)</label>          
       {{ form.PI }} 

      </div> 
     <div class="form-group">   
       <label for="id_PI">CTSA Prinicipal Investigator Username (*)</label>          
       {{ form.PIUsername }} 

      </div> 
     <div class="form-group">   
       <label for="id_ctsaPI">Prinicipal Investigator Institute (*)</label>          
       {{ form.PIInstitution }} 

      </div> 
     <div class="form-group">   
       <label for="id_PIName"> Prinicipal Investigator Phone Number (*)</label>          
       {{ form.PIPhoneNumber }} 

      </div> 

     <div class="form-group">   
       <label for="id_UserEmail">User Email (*)</label>          
       {{ form.userEmail }} 

      </div> 

     <div class="form-group">   
       <label for="id_PI">PI Email (*)</label>          
       {{ form.PIEmail }} 

      </div> 

      <div class="form-group" > 
       <br/> 
       <input type="submit" value="Submit" class="btn btn-primary" /> 

      </div> 

    </form> 
</section> 

view.py

@csrf_protect 
def register(request): 
    if request.method == 'POST': 
     form = UserInformationForm(request.POST) 
     if form.is_valid(): //// here it is breaking 
       form.save() 
    else: 
     form = UserInformationForm() 

    variables = { 'form': form } 

    return render(request, 'registration/register.html',variables) 

我不知道什么是错在此代码

回答

1

我不知道如果这有助于但有时我发现返回的错误看起来像是一条红色的鲱鱼,最终让我疯狂了好几个小时。我不是专家,从我坐的地方来看,你的表单的代码对我来说看起来很好,这可能是以前工作的原因。然而,在你的html文件中,你有两个标签用相同的id指定,第二个恰好在你最近添加的PIEmail字段上。巧合?也许!这是一个很长的一步,但也许最初会改变,看看它是否有任何改变。

变化:

<div class="form-group">   
    <label for="id_PI">PI Email (*)</label>          
    {{ form.PIEmail }} 
</div> 

到:

<div class="form-group">   
    <label for="id_PIEmail">PI Email (*)</label>          
    {{ form.PIEmail }} 
</div> 

注:另一个实例是在PIUsername场。

+0

不知道如何,但它这次工作。 –

相关问题