2017-02-27 6 views
1

データベースにアイテムを追加するフォームがあります。これには、CancelSubmitという2つのボタンが含まれています。私が持っている問題は、空のフォームの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')) 

答えて

1

はあなたのキャンセルボタンを本当にsubmitボタンである必要はありません。通常のボタンを使用するだけで、ユーザーをホームページに戻すことができます(hrefを使用するか、onclickイベントをキャプチャします)。

それでもcancelボタンがWTFormsフィールドにしたい場合は、1つのオプションは、フォームで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 
関連する問題