Search code examples
pythonflaskwtformsflask-wtforms

Clear valid form after it is submitted


I want to reset the form after it validates. Currently the form will still show the previous data after it is submitted and valid. Basically, I want the form to go back to the original state with all fields clean. What is the correct to do this?

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

Solution

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