如何忽略 flask-wtf 中的字段验证?

How can I ignore a field validation in flask-wtf?

我有一个用于向我的数据库添加项目的表单,其中包含两个按钮:CancelSubmit。我遇到的问题是,当我用空表单按下 Cancel 按钮时,我收到 Please fill out this field. 错误,而不是返回到我的主页(请参阅 views.py 了解逻辑)。那么,当我按下 Cancel 按钮时,如何让我的应用程序忽略 DataRequired 验证器呢?

forms.py:

class ItemForm(FlaskForm):
  id = StringField('id', validators=[DataRequired()]
  name = StringField('Name', validators=[DataRequired()]
  cancel = SubmitField('Cancel')
  submit = SubmitField('Submit')

views.py:

def add_item()
  form = ItemForm()
  if form.validate_on_submit():
    if form.submit.data:
      # Code to add item to db, removed for brevity.
    elif form.cancel.data:
      flash('Add operation cancelled')
      return redirect(url_for('home.homepage'))

您的取消按钮实际上不需要是提交按钮。您可以简单地使用普通按钮将用户带回主页(使用 href 或捕获 onclick 事件)。

如果您仍希望 cancel 按钮成为 WTForms 字段,一种选择是覆盖表单中的 validate 方法并删除 DataRequired 上的验证器16=] 和 name。以下内容未经测试,但可以为您提供一个工作起点。

class ItemForm(FlaskForm):
  id = StringField('id')
  name = StringField('Name')
  cancel = SubmitField('Cancel')
  submit = SubmitField('Submit')

def validate(self):                                                         

    rv = Form.validate(self)                                                

    if not rv:                                                              
        return False                                                        

    if self.cancel.data
        return True

    if self.id.data is None or self.name.data is None:   
        return False                                                   

    return True