用于比较 Flask-WTForms 中两个日期字段的字段验证
Field validations to compare two date fields in Flask-WTForms
我有两个表单域:start_date 和 finish_date。现在我想检查 finish_date 是否大于或等于 start_date。我该如何实施?
class AddChallenge(FlaskForm):
title = StringField('Title', validators=[DataRequired()])
start_date = DateField('Start Date',
validators=[DataRequired(),
DateRange(min=date.today())],
format='%Y-%m-%d', default=date.today)
finish_date = DateField('Finish Date',
validators=[DataRequired(),
DateRange(min=date.today())],
format='%Y-%m-%d', default=date.today)
submit = SubmitField("Create")
class AddChallenge(FlaskForm):
title = StringField('Title', validators=[DataRequired()])
start_date = DateField('Start Date',
validators=[DataRequired()],
format='%Y-%m-%d', default=date.today)
finish_date = DateField('Finish Date',
validators=[DataRequired()
],
format='%Y-%m-%d', default=date.today)
submit = SubmitField("Create")
def validate_finish_date(self, filed):
if filed.data <= self.start_date.data:
raise ValidationError('Finish date must more or equal start date.')
您可以使用此类命名规则来自定义验证规则。比如这个validate_yourfiledname
.
刚遇到同样的问题,发现 增强了内置 validate()
功能。它解决了我的问题,并且与接受的答案基本相同。为了完整起见,在你的情况下:
class AddChallenge(FlaskForm):
title = StringField('Title', validators=[DataRequired()])
start_date = DateField('Start Date',
validators=[DataRequired()],
format='%Y-%m-%d', default=date.today)
finish_date = DateField('Finish Date',
validators=[DataRequired()
],
format='%Y-%m-%d', default=date.today)
submit = SubmitField("Create")
# Custom validation function (redefine built-in)
def validate(self, **kwargs):
# Standard validators
rv = FlaskForm.validate(self)
# Ensure all standard validators are met
if rv:
# Ensure end date >= start date
if self.start_date.data > self.finish_date.data:
self.finish_date.errors.append('Finish date must be set after the starting date.')
return False
return True
return False
我有两个表单域:start_date 和 finish_date。现在我想检查 finish_date 是否大于或等于 start_date。我该如何实施?
class AddChallenge(FlaskForm):
title = StringField('Title', validators=[DataRequired()])
start_date = DateField('Start Date',
validators=[DataRequired(),
DateRange(min=date.today())],
format='%Y-%m-%d', default=date.today)
finish_date = DateField('Finish Date',
validators=[DataRequired(),
DateRange(min=date.today())],
format='%Y-%m-%d', default=date.today)
submit = SubmitField("Create")
class AddChallenge(FlaskForm):
title = StringField('Title', validators=[DataRequired()])
start_date = DateField('Start Date',
validators=[DataRequired()],
format='%Y-%m-%d', default=date.today)
finish_date = DateField('Finish Date',
validators=[DataRequired()
],
format='%Y-%m-%d', default=date.today)
submit = SubmitField("Create")
def validate_finish_date(self, filed):
if filed.data <= self.start_date.data:
raise ValidationError('Finish date must more or equal start date.')
您可以使用此类命名规则来自定义验证规则。比如这个validate_yourfiledname
.
刚遇到同样的问题,发现 validate()
功能。它解决了我的问题,并且与接受的答案基本相同。为了完整起见,在你的情况下:
class AddChallenge(FlaskForm):
title = StringField('Title', validators=[DataRequired()])
start_date = DateField('Start Date',
validators=[DataRequired()],
format='%Y-%m-%d', default=date.today)
finish_date = DateField('Finish Date',
validators=[DataRequired()
],
format='%Y-%m-%d', default=date.today)
submit = SubmitField("Create")
# Custom validation function (redefine built-in)
def validate(self, **kwargs):
# Standard validators
rv = FlaskForm.validate(self)
# Ensure all standard validators are met
if rv:
# Ensure end date >= start date
if self.start_date.data > self.finish_date.data:
self.finish_date.errors.append('Finish date must be set after the starting date.')
return False
return True
return False