検証後にフォームをリセットしたい。現在、フォームは送信されて有効になった後も以前のデータを表示します。基本的には、すべてのフィールドをクリーンにしてフォームを元の状態に戻したいと思います。これを行うための正しいことは何ですか?
@mod.route('/', methods=['GET', 'POST'])
def home():
form = NewRegistration()
if form.validate_on_submit():
#save in db
flash(gettext(u'Thanks for the registration.'))
return render_template("users/registration.html", form=form)
問題は、データが検証されて処理された場合でも、渡されたデータを使用してフォームを常にレンダリングしていることです。さらに、ブラウザは最後のリクエストの状態を保存するため、この時点でページを更新すると、ブラウザはフォームを再送信します。
成功したフォームリクエストを処理した後、ページにリダイレクトして新しい状態を取得します。
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegistrationForm()
if form.validate_on_submit():
# do stuff with valid form
# then redirect to "end" the form
return redirect(url_for('register'))
# initial get or form didn't validate
return render_template('register.html', form=form)
デビディズムの答えは正しいです。
しかし、一度リセットする必要のあるフィールドがいくつかあるフォームをリロードする必要がありました。だから、私はこれをしました、多分それは最もきれいな方法ではありませんが、それは私のために働きました:
form = MyForm()
if form.validate_on_submit():
# save all my data...
myvar1 = form.field1.data
myvar2 = form.field2.data
# etc...
# at first GET and at every reload, this is what gets executed:
form.field1.data = "" # this is the field that must be empty at reload
form.field2.data = someobject # this is a field that must be filled with some value that I know
return render_template('mypage.html', form=form)