我希望此表单验证两个输入中是否存在日期属性,或者根本没有日期输入,但是只输入任何一个输入时都不会。
因此,如果你有一个开始日期,你必须有一个结束日期,反之亦然,但你不能只单独设置开始或结束日期。
我的代码如下:
class MyForm(Form):
start = DateTimeField(u'Start', format='%Y-%m-%d')
end_date = DateTimeField(u'End', format='%Y-%m-%d')
因此,它验证是否:
不应验证是否:
提前感谢您的帮助!
答案 0 :(得分:0)
如果您对使用其他形式的约束不感兴趣,可以在线覆盖验证功能。更多:http://wtforms.readthedocs.io/en/latest/validators.html#custom-validators
class MyForm(Form):
start = DateTimeField(u'Start', format='%Y-%m-%d')
end_date = DateTimeField(u'End', format='%Y-%m-%d')
def validate(self):
if not Form.validate(self):
return False
a = self.start.field.data
b = self.end_date.field.data
if (a and b) or not (a or b):
return True
else:
self.start.field.errors.append('Both or none dates must exist.')
return False
答案 1 :(得分:0)
我最终解决了这个问题:
在类定义之外创建了一个名为validator的函数:
def validator(form, field):
a = self.start.field.data
b = self.end_date.field.data
if not ((a and b) or not (a or b)):
raise ValidationError('Both or none dates must exist.')
并修改了这样的类:
class MyForm(Form):
start = DateTimeField(u'Start', [validators.Optional(), validator], format='%Y-%m-%d')
date_end = DateTimeField(u'End', [validators.Optional(), validator], format='%Y-%m-%d')
需要添加可选的验证器,因为默认情况下WTForm会使DateTimeField成为必填字段