Flask WTForms 自定义验证器不工作
Flask WTForms Custom Validator Not Working
此自定义验证器应检查 2 个数据库,以查看在表单中输入的值是否等于名为 training_name 和日期的列中的值。但是,如果我输入数据库中存在的重复记录,则不会出现任何错误。请指教
class add_training_form(FlaskForm): #All fields are required
training_course = SelectField('Training Course', choices=[], validators=[DataRequired()]) #The choices will be assigned in route
training_provider = SelectField('Training Provider', choices=[], validators=[DataRequired()])
date = DateField('Date of Training', validators=[DataRequired()])
cpd = IntegerField('CPD hours',validators=[DataRequired(message='Invalid input')] )
certificate = FileField('Certificate', validators=[FileRequired(),FileAllowed(['jpg','png','pdf'])])#For certificate
submit = SubmitField('Submit')
def validate_duplicate(self, training_course, date):
training = Training.query.filter_by(training_name=training_course.data,date=date.data).first()
mv = ManagerVerification.query.filter_by(training_name=training_course.data,date=date.data).first()
if training or mv:
raise ValidationError('This is a duplicate training record')
在 Wtforms 文档中,如果你想制作自定义验证器,你需要在 FlaskForm class 中创建一个当前名称为 'validate_ + {your field name}' 的函数,FlaskWtf 将传递整个表单和字段,我认为此代码对您有用
class add_training_form(FlaskForm): #All fields are required
training_course = SelectField('Training Course', choices=[], validators=[DataRequired()]) #The choices will be assigned in route
training_provider = SelectField('Training Provider', choices=[], validators=[DataRequired()])
date = DateField('Date of Training', validators=[DataRequired()])
cpd = IntegerField('CPD hours',validators=[DataRequired(message='Invalid input')] )
certificate = FileField('Certificate', validators=[FileRequired(),FileAllowed(['jpg','png','pdf'])])#For certificate
submit = SubmitField('Submit')
def validate_training_course(form, training_course):
training = Training.query.filter_by(training_name=training_course.data,date=form.date.data).first()
mv = ManagerVerification.query.filter_by(training_name=training_course.data,date=form.date.data).first()
if training or mv:
raise ValidationError('This is a duplicate training record')
此自定义验证器应检查 2 个数据库,以查看在表单中输入的值是否等于名为 training_name 和日期的列中的值。但是,如果我输入数据库中存在的重复记录,则不会出现任何错误。请指教
class add_training_form(FlaskForm): #All fields are required
training_course = SelectField('Training Course', choices=[], validators=[DataRequired()]) #The choices will be assigned in route
training_provider = SelectField('Training Provider', choices=[], validators=[DataRequired()])
date = DateField('Date of Training', validators=[DataRequired()])
cpd = IntegerField('CPD hours',validators=[DataRequired(message='Invalid input')] )
certificate = FileField('Certificate', validators=[FileRequired(),FileAllowed(['jpg','png','pdf'])])#For certificate
submit = SubmitField('Submit')
def validate_duplicate(self, training_course, date):
training = Training.query.filter_by(training_name=training_course.data,date=date.data).first()
mv = ManagerVerification.query.filter_by(training_name=training_course.data,date=date.data).first()
if training or mv:
raise ValidationError('This is a duplicate training record')
在 Wtforms 文档中,如果你想制作自定义验证器,你需要在 FlaskForm class 中创建一个当前名称为 'validate_ + {your field name}' 的函数,FlaskWtf 将传递整个表单和字段,我认为此代码对您有用
class add_training_form(FlaskForm): #All fields are required
training_course = SelectField('Training Course', choices=[], validators=[DataRequired()]) #The choices will be assigned in route
training_provider = SelectField('Training Provider', choices=[], validators=[DataRequired()])
date = DateField('Date of Training', validators=[DataRequired()])
cpd = IntegerField('CPD hours',validators=[DataRequired(message='Invalid input')] )
certificate = FileField('Certificate', validators=[FileRequired(),FileAllowed(['jpg','png','pdf'])])#For certificate
submit = SubmitField('Submit')
def validate_training_course(form, training_course):
training = Training.query.filter_by(training_name=training_course.data,date=form.date.data).first()
mv = ManagerVerification.query.filter_by(training_name=training_course.data,date=form.date.data).first()
if training or mv:
raise ValidationError('This is a duplicate training record')