Очистить действующую форму после ее отправки

Я хочу сбросить форму после ее проверки. В настоящее время форма по-прежнему будет отображать предыдущие данные после того, как она будет отправлена ​​и действительна. По сути, я хочу, чтобы форма вернулась в исходное состояние со всеми чистыми полями. Как правильно это сделать?

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

person user455318    schedule 11.08.2015    source источник


Ответы (2)


Проблема в том, что вы всегда отображаете форму с любыми данными, которые были переданы, даже если эти данные проверены и обработаны. Кроме того, браузер сохраняет состояние последнего запроса, поэтому, если вы обновите страницу в этот момент, браузер повторно отправит форму.

После обработки успешного запроса формы перенаправьте на страницу, чтобы получить новое состояние.

@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)
person davidism    schedule 11.08.2015

давидизм ответ правильный.

Но однажды мне пришлось перезагрузить форму только с несколькими полями, которые нужно было сбросить. Итак, я сделал это, может быть, это не самый чистый способ, но он сработал для меня:

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)
person axeda    schedule 30.10.2019