Django模型表单验证

时间:2018-06-12 18:23:30

标签: python django django-forms

我只想从我创建的HTML表单中输入A或B ... 但是这个没用。 我试过,如果类型不是' A'或者' B'或使用!= ..没有用。 什么是正确的代码?

forms.py

TextView

我的HTML

class YamlForm(forms.ModelForm):
class Meta:
    model = Form_info
    fields = '__all__'
    # fields = ['name', 'type', 'vlan_id', 'rdp', 'ip_master', 'ip_backup', 'vip', 'nat_ip', 'cidr', 'dns', 'dhcp', 'dhcp_pool_start', 'dhcp_pool_end']
    widgets = {
        'name': forms.TextInput(attrs={'id': 'name', 'name': 'name'}),
        'vlan_id': forms.TextInput(attrs={'id': 'vlan_id', 'name': 'vlan_id'}),
        'rdp': forms.Select(choices=BOOLEAN_CHOICES),
        'dhcp':forms.Select(choices=BOOLEAN_CHOICES)
    }
    error_messages = {
        'name': {
            'max_length': _("This writer's name is too long."),
        },
    }


def clean_type(self):
        type = self.cleaned_data['type']
        if not 'A' or 'B':
            raise forms.ValidationError("Please enter A or B")


        return type


def clean_vlan_id(self):
        vlan_id = self.cleaned_data.get('vlan_id')
        if vlan_id not in range(1300, 1899):
            raise forms.ValidationError("Pleanse enter the right # in range")

        return vlan_id

1 个答案:

答案 0 :(得分:2)

你的问题不是Django,而是纯粹的Python。

if not 'A' or 'B':

不会评估你的期望。相反,当您想要比较多个值上的变量时,请使用以下语法:

if type not in {'A','B'}:

请注意,我使用set因为它的查找时间比list等其他数据结构更快。