我想只运行特定的校验和验证,如果运行所需的,最小和最大验证以及自定义is_digit()
验证。
原因是如果某些其他验证失败,我不想显示校验和验证的错误消息。
我试过了:
id_number = ZaIdField(
required=False,
max_length=13,
min_length=13,
validators=[validate_numeric, ]
)
然后我有其他人在super()
运行后的校验和验证器:
class ZaIdField(forms.CharField):
'''
Field for validating ZA Id Numbers
'''
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def validate(self, value):
"""Check if id is valid"""
# Use the parent's handling of required fields, etc.
super().validate(value)
validate_sa_id(value)
更新:
换句话说,我的最终验证取决于正确的长度和所有数字。所以我只想在运行它之前确保它是正确的。
查看django docs以获取更多信息。实际上它非常简单。
def clean_id_number(self):
data = self.cleaned_data['id_number']
if checksum:
raise forms.ValidationError("Checksum error!")
return data
这可能已经在某个地方得到了回答,但看起来正确的地方是以qazxsw poi的形式:
clean()
def clean(self):
cleaned_data = super().clean()
id_num = cleaned_data.get('id_number')
if id_num:
validate_sa_id(id_num)
return cleaned_data
的关键部分是:
当调用表单的clean()方法时,将运行所有单独的字段清理方法(前两个部分),因此self.cleaned_data将填充到目前为止幸存的任何数据。
因此,您只需检查该字段是否已存活,如果已存在则已通过先前的验证