如果一个验证器有效,则Django表单有效

时间:2017-03-01 00:02:51

标签: django validation

我正在django

中处理此表单
class EmailOrPhoneForm(forms.Form):
      phone_or_email =  forms.CharField(
         validators=[validate_phonenumber, validate_email],
     ) 

它有两个验证器,但如果其中一个有效,电话号码或电子邮件,我希望表单返回true。

如果不编写一个可以完成所有操作的验证器,我怎么能这样做呢?

1 个答案:

答案 0 :(得分:0)

在查看django的源代码后,我发现他们是如何做到的 在django.core.validators validate_ipv46_address函数中。它适用于两个验证器: validate_ipv4_addressvalidate_ipv6_address

将相同的情况应用到我的案例中。

def validate_email_or_phone(value):
     try:
         validate_email(value)
     except ValidationError:
         try:
             validate_phone_number(value)
         except ValidationError:
             raise ValidationError(_('Enter a valid Email address or Phone number'), code='invalid')

这将是该字段的新验证器

class EmailOrPhoneForm(forms.Form):
      phone_or_email =  forms.CharField(
         validators=[validate_email_or_phone],
     ) 
希望有所帮助。