Clear valid form after it is submitted
The issue is that you're always rendering the form with whatever data was passed in, even if that data validated and was handled. In addition, the browser stores the state of the last request, so if you refresh the page at this point the browser will re-submit the form.
After handling a successful form request, redirect to the page to get a fresh state.
@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)
davidism answer is correct.
But once I had to reload a form with only a few fields that had to be resetted. So, I did this, maybe it's not the cleanest way but it worked for me:
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)