仅当 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()
我尝试了验证方法,但仍然没有显示任何消息。
也许我弄错了,但让我继续讨论
用户将 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
如果这不能完全回答您的问题,我很确定您会在上面附加的视频中得到答案!
亲切的问候!