【问题标题】:Validate other state form field in django验证 django 中的其他状态表单字段
【发布时间】:2017-11-13 05:38:35
【问题描述】:

当我尝试验证 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")

【问题讨论】:

    标签: python django forms validation django-models


    【解决方案1】:
    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 
    

    【讨论】:

    • 感谢 NeErAj KuMaR,您的解决方案有效。我不得不从你的代码中删除“return Other_State”,因为我得到 'str' object has no attribute 'get' 错误。
    【解决方案2】:

    当验证字段相互对抗时,您需要使用 clean 方法。像这样的:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-02
      • 2020-11-27
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多