【问题标题】:How can I ignore a field validation in flask-wtf?如何忽略 flask-wtf 中的字段验证?
【发布时间】:2017-02-28 08:00:55
【问题描述】:

我有一个向我的数据库添加项目的表单,其中包括两个按钮: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'))

【问题讨论】:

    标签: flask wtforms flask-wtforms


    【解决方案1】:

    您的取消按钮并不一定是提交按钮。您可以简单地使用一个普通按钮将用户带回主页(使用href 或捕获onclick 事件)。

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

    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_button(class_="...", formnovalidate=True) }}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多