2017-06-11 55 views
1

当我尝试验证Django表单时,如果选择“其他状态”(美国境外的状态),用户必须在另一个表单上键入状态字段(其他州字段)。如果他的州是美国州,则不需要其他州的州。 以下是我的代码;验证django中的其他状态表单字段

models.py

class User(models.Model): 
    First_Name = models.CharField(max_length=100) 
    Last_Name = models.CharField(max_length=100) 
    Date_of_Birth = models.DateField() 
    State_of_Origin = models.CharField(max_length=50, choices=STATE_CHOICES) 
    Other_State = models.CharField(max_length=50, null=True) 
    Marita_status = models.CharField(max_length=50, choices=STATUS_CHOICES) 
    Country = CountryField(default='US') 
    Email = models.EmailField(unique=True) 
    Phone_Number = PhoneNumberField("Phone Number(+1..)", default='+1') 

Form.py

class RegForm(forms.ModelForm): 
    Date_of_Birth = forms.DateField(widget=AdminDateWidget()) 
    #Other_State = forms.CharField(max_length=50, required=False) 

    class Meta(): 
     model = User 
     fields = '__all__' 

    def clean_State_of_Origin(self): 
     State_of_Origin = self.cleaned_data['State_of_Origin'] 
     return State_of_Origin 

    def clean_Other_State(self): 
     Other_State = self.cleaned_data['Other_State'] 
     if Other_State != 'Other': 

      self.Other_State = forms.CharField(max_length=50, required=False) 
     else: 
      raise forms.ValidationError("Name is invalid") 

回答

0
def clean(self): 
     Other_State = self.cleaned_data['Other_State'] 
     State_of_Origin = self.cleaned_data['State_of_Origin'] 
     if State_of_Origin == 'Other': 
      if not Other_State: 
       raise forms.ValidationError('Write Other State name because you selected other option from state of origin dropdown') 
     return Other_State 
+0

感谢NeErAj库马尔,你的解决方案工作。我不得不从你的代码中删除“return Other_State”,因为我得到'str'对象没有属性'get'错误。 – gnome247

0

当验证领域对对方你需要使用清洁方法。像这样的东西:

class RegForm(forms.ModelForm): 
    Date_of_Birth = forms.DateField(widget=AdminDateWidget()) 
    Other_State = forms.CharField(max_length=50, required=False) 

    class Meta(): 
     model = User 
     fields = '__all__' 

    def clean(self): 
     Other_State = self.cleaned_data['Other_State'] 
     if Other_State != 'Other': 
      self.add_error('Other_State', "Name is invalid") 

这样的事情应该让你开始。

另外,尝试使用pep8变量名称。 DATE_OF_BIRTH代替DATE_OF_BIRTH