WTForm "OR" 条件验证器? (电子邮件或 phone)
WTForm "OR" conditional validator? (Either email or phone)
class ContactForm(Form):
name = StringField('Name',
validators=[DataRequired(), Length(max=255)])
email = StringField('Email',
validators=[Optional(), Email(), Length(max=255)])
phone = StringField('Phone number',
validators=[Optional(), NumberRange(min=8, max=14)])
comment = TextAreaField(u'Comment',
validators=[DataRequired()])
是否可以指定一个验证器,以便 email
或 phone
是必需的?
您可以在表单上创建一个 validate
方法并进行一些手动检查。这样的事情可能会让你开始。
class MyForm(Form):
name = StringField('Name',
validators=[DataRequired(), Length(max=255)])
email = StringField('Email',
validators=[Optional(), Email(), Length(max=255)])
phone = StringField('Phone number',
validators=[Optional(), NumberRange(min=8, max=14)])
comment = TextAreaField(u'Comment',
validators=[DataRequired()])
def validate(self):
valid = True
if not Form.validate(self):
valid = False
if not self.email and not self.phone:
self.email.errors.append("Email or phone required")
valid = False
else:
return valid
谢谢@reptilicus。我对它的答案进行了一些小改动。
- 必须检查数据字段
self.email.data and self.phone.data
- 还必须 return 在
validate()
方法结束时有效而不是 else
条件。
def validate(self):
valid = True
if not Form.validate(self):
valid = False
if not self.email and not self.phone:
self.email.errors.append("Email or phone required")
valid = False
return valid
class ContactForm(Form):
name = StringField('Name',
validators=[DataRequired(), Length(max=255)])
email = StringField('Email',
validators=[Optional(), Email(), Length(max=255)])
phone = StringField('Phone number',
validators=[Optional(), NumberRange(min=8, max=14)])
comment = TextAreaField(u'Comment',
validators=[DataRequired()])
是否可以指定一个验证器,以便 email
或 phone
是必需的?
您可以在表单上创建一个 validate
方法并进行一些手动检查。这样的事情可能会让你开始。
class MyForm(Form):
name = StringField('Name',
validators=[DataRequired(), Length(max=255)])
email = StringField('Email',
validators=[Optional(), Email(), Length(max=255)])
phone = StringField('Phone number',
validators=[Optional(), NumberRange(min=8, max=14)])
comment = TextAreaField(u'Comment',
validators=[DataRequired()])
def validate(self):
valid = True
if not Form.validate(self):
valid = False
if not self.email and not self.phone:
self.email.errors.append("Email or phone required")
valid = False
else:
return valid
谢谢@reptilicus。我对它的答案进行了一些小改动。
- 必须检查数据字段
self.email.data and self.phone.data
- 还必须 return 在
validate()
方法结束时有效而不是else
条件。
def validate(self): valid = True if not Form.validate(self): valid = False if not self.email and not self.phone: self.email.errors.append("Email or phone required") valid = False return valid