我如何可以忽略flask wtf中的现场验证?

我如何可以忽略flask wtf中的现场验证?,flask,wtforms,flask-wtforms,Flask,Wtforms,Flask Wtforms,我有一个表单可以向我的数据库中添加一个项目,它包括两个按钮:Cancel和Submit。我遇到的问题是,当我用空表单按下Cancel按钮时,我得到一个请填写此字段。错误,而不是返回到我的主页(有关逻辑,请参阅views.py)。那么,当我按下Cancel按钮时,如何让我的应用程序忽略DataRequired验证器呢 forms.py: class ItemForm(FlaskForm): id = StringField('id', validators=[DataRequired()]

我有一个表单可以向我的数据库中添加一个项目,它包括两个按钮:
Cancel
Submit
。我遇到的问题是,当我用空表单按下
Cancel
按钮时,我得到一个
请填写此字段。
错误,而不是返回到我的主页(有关逻辑,请参阅
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')
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'))
views.py

class ItemForm(FlaskForm):
  id = StringField('id', validators=[DataRequired()]
  name = StringField('Name', validators=[DataRequired()]
  cancel = SubmitField('Cancel')
  submit = SubmitField('Submit')
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
事件)

如果您仍然希望
取消
按钮成为WTForms字段,一个选项是覆盖表单中的
验证
方法,并删除
id
名称
上所需的
数据
验证器。以下内容未经测试,但可能会为您提供一个工作起点

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  

一种更简单、我认为更正确的方法是在模板中添加
formnovalidate=True
。例如
{{form.delete_按钮(class_=“…”,formnovalidate=True)}