2017-02-27 69 views
1

我有一個表格可以添加項目到我的數據庫,其中包括兩個按鈕:CancelSubmit。我遇到的問題是,當我按下空格的Cancel按鈕時,出現Please fill out this field.錯誤,而不是返回到我的主頁(邏輯請參見views.py)。那麼當我按下Cancel按鈕時,如何讓我的應用程序忽略DataRequired驗證程序?如何忽略flask-wtf中的字段驗證?

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')) 

回答

1

您的取消按鈕並不真正需要的是一個提交按鈕。您只需擁有一個將用戶帶回主頁的正常按鈕(使用href或捕獲onclick事件)。

如果您仍然希望cancel按鈕是一個WTForms場,其中一個方案是覆蓋在形式validate方法和刪除idnameDataRequired驗證。下面是未經測試,但可能會給你一個起點工作。

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