如何确保在烧瓶WTFORMS中,仅在填充后才能测试表单字段的有效性



我正在尝试为网站创建搜索表格,您可以在其中找到电影评论。因此,用户应该能够通过输入电影标题或IMDB ID或发行年份来搜索他们的电影。但是,也不允许用户使用空白表格进行搜索。

class SearchForm(FlaskForm):
movie_title = StringField('Movie Title', validators=None)
imdb_id = StringField('IMDB_ID', validators=[Length(min=9,max=9)])
year = IntegerField('Year of Release', validators=[Length(min=4,max=4)])
submit = SubmitField('Search')

这是我当前的形式。但是,由于IMDB_ID和年份的长度有效人员,如果用户将表格留下空白的两个字段,则无法提交表格,因为一个空字段不分别满足9和4的最小长度。无论如何,是否可以解决此问题,以便只有在填充中才能验证表格?

您需要提供一种检查所有适当字段的方法,并确保至少一个具有内容。然后,您可以检查表单验证方法中的先决条件。

class SearchForm(FlaskForm):
    # ....
    def any_fields_filled(self):
        return any(self.movie_title.data, self.imdb_id.data, self.year.data)
    def validate(self):
        return self.any_fields_filled()

然后,您需要将字段标记为可选的,例如:

imdb_id = StringField('IMDB_ID', validators=[Optional(), Length(min=9,max=9)])

如果您发现自己需要咨询any_fields_filled()作为您在单个字段上声明的validators的一部分,则可以使用方法(validate_field_name()(,也可以使用wtforms-components库中的if((验证器。

最新更新