如何在FlaskForm中的多个字段上创建UniqueValidator

时间:2019-11-11 08:50:26

标签: python flask-wtforms wtforms

我有一个FlaskForm,叫做AddStudentForm,它像这样:

class AddStudentForm(FlaskForm):
    first_name = StringField('First Name', validators=[DataRequired(), Length(min=3, max=24)])
    last_name = StringField('Last Name', validators=[DataRequired(), Length(min=3, max=24)])
    dob = DateField('Date of Birth', format='%d/%m/%Y', validators=[DataRequired()])
    cls = SelectField('Class', choices=[(member.value, name) for name, member in Level.__members__.items()])
    sec = SelectField('Section', choices=[('A', 'SEC-A'), ('B', 'SEC-B'), ('C', 'SEC-C')])
    roll = IntegerField('Roll Number', validators=[DataRequired(), NumberRange(min=1, max=400)])
    email = StringField('Email', validators=[DataRequired(), Email()])
    submit = SubmitField('Add')

我想同时验证cls(类的缩写)和滚动字段,以使这两个字段的组合保持唯一。在像 email 这样的单个字段上,我可以轻松做到这一点,但是如何在多个字段上做到这一点呢?

我的关联代码如下(供参考):

AddStudentForm中的唯一电子邮件验证程序(我希望多个字段同时使用类似的内容)

def validate_email(self, email):
    stud = Student.query.filter_by(email=email.data).first()
    if stud:
        raise ValidationError('A student is already exists with same email! Please change your email.')

Enum字段的级别cls定义

class Level(Enum):
    V = 'V'
    VI = 'VI'
    VII = 'VII'
    VIII = 'VIII'

0 个答案:

没有答案