如何在特定条件下在Flask Forms中进行验证?

问题描述 投票:0回答:1

仅当 license_type 为 Production 时,我才需要 po_count 和 cpe_count 字段。 该记录不会进入数据库,这正是我想要的,但当用户在类型为 Production 时未给出值时,它不会抛出消息

类 LicenseRequestForm(FlaskForm): salesperson = StringField('销售人员姓名', validators=[DataRequired()]) license_type_choices = [('实验室', '实验室'), ('生产', '生产')] License_type = SelectField('许可证类型', Choices=license_type_choices, validators=[DataRequired()]) po_count = IntegerField('PO 计数', validators=[Optional()]) cpe_count = IntegerField('CPE 数量', validators=[Optional()])

ha = BooleanField('High Availability (HA) Option')


file1 = FileField('NodeID File 1', validators=[DataRequired()])
file2 = FileField('NodeID File 2', validators=[Optional()])

submit = SubmitField('Submit')

def validate(self, extra_validators=None):
    if self.license_type.data == 'Production':
        self.po_count.validators = [DataRequired()]
        self.cpe_count.validators = [DataRequired()]
    elif self.license_type.data == 'Lab':
        self.po_count.validators = [Optional()]
        self.cpe_count.validators = [Optional()]

    if self.ha.data:
        self.file1.validators = [DataRequired()]
        self.file2.validators = [DataRequired()]
    else:
        self.file2.validators = [Optional()]

    return super().validate()

我尝试了验证方法,但仍然没有显示任何消息。

python flask flask-wtforms
1个回答
0
投票

也许我弄错了,但让我继续讨论

用户将 license_type 设置为 PRO,并且没有给出 po 和 cpe 计数值,并且由于此信息不够,您需要提供某种消息,例如:“请设置 po、cpe 计数值”

如果是这样的话,Flask 提供了 flash,如果用户不正确使用表单,就会显示一条消息,非常简单。

文档:https://flask.palletsprojects.com/en/2.3.x/patterns/flashing/

视频解释:https://www.youtube.com/watch?v=UIJKdCIEXUQ从时间戳开始25:10

如果这不能完全回答您的问题,我很确定您会在上面附加的视频中得到答案!

亲切的问候!

© www.soinside.com 2019 - 2024. All rights reserved.