Flask 自定义验证程序不工作

Flask 自定义验证程序不工作,flask,flask-sqlalchemy,flask-wtforms,wtforms,Flask,Flask Sqlalchemy,Flask Wtforms,Wtforms,此自定义验证器应检查2个数据库,以查看表单中输入的值是否与名为training_name和date的列中的值相同。但是,如果输入数据库中存在的重复记录,则不会引发错误。请告知 class add_training_form(FlaskForm): #All fields are required training_course = SelectField('Training Course', choices=[], validators=[DataRequired()]) #The ch

此自定义验证器应检查2个数据库,以查看表单中输入的值是否与名为training_name和date的列中的值相同。但是,如果输入数据库中存在的重复记录,则不会引发错误。请告知

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 doc is write中,如果你想创建一个自定义验证器,你需要在FlaskForm类中创建一个函数,当前名称为“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')