Данные формы не представлены, когда текстовое поле уже заполнено - PullRequest
0 голосов
/ 10 октября 2018

Я использую WTForms и Jinja2, чтобы создать страницу с редактируемой текстовой областью.Идея состоит в том, чтобы редактировать текст в базе данных, поэтому текстовое поле уже должно быть заполнено текстом для редактирования пользователем.

На основе этот вопрос / ответ У меня есть что-то вроде следующего кода:
В app.py:

form = MyForm() # MyForm is defined elsewhere simply as 
                # class MyForm(FlaskForm): content=TextAreaField()
prepopulated = GetTextFromDatabase()
form.content.data = prepopulated

if form.validate_on_submit():
    new_content = form.content.data
    SaveToDatabase(new_content)

return flask.render_template('edit.html', form=form)

В edit.html:

<form method="POST">
  <div>
    {{ form.hidden_tag() }}
    {{ form.content }}
  </div>
  <div>
    <button type="submit">Submit</button>
  </div>
</form>

Однако при отправке изменения, внесенные в текст, не сохраняются в базе данных.Если я удалю form.content.data = prepopulated, изменения будут сохранены.

Итак, как я могу предварительно заполнить текстовую область, но убедиться, что все изменения в тексте сохранены?

1 Ответ

0 голосов
/ 11 октября 2018

Вы не поделились кодом для MyForm, который был бы полезен, поскольку принятый ответ в размещенной вами ссылке советовал использовать аргумент default на этапе создания формы.

Причинаэто не работает, потому что если пользователь POSTS форма для вашего маршрута, чем все, что вы делаете, это перезаписываете данные , прежде чем проверять форму с помощью этого кода:

prepopulated = GetTextFromDatabase()
form.content.data = prepopulated

Вместопочему бы не попробовать сначала проверить данные формы и выполнить сохранение вашей базы данных следующим образом:

if form.validate_on_submit():
    new_content = form.content.data
    SaveToDatabase(new_content)
else:
    prepopulated = GetTextFromDatabase()
    form.content.data = prepopulated

return flask.render_template('edit.html', form=form)
...