Flask Пользовательский валидатор WTForms не работает - PullRequest
0 голосов
/ 13 февраля 2020

Этот пользовательский валидатор должен проверить 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')

1 Ответ

0 голосов
/ 13 февраля 2020

В Wtforms do c - это запись, если вы хотите создать собственный валидатор, вам нужно создать функцию внутри класса 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')
...