Метод populate_obj
Метод populate_obj применяется к экземпляру формы
WTForms и копирует значения всех полей формы в одноимённые
атрибуты указанного объекта. Первым параметром передаётся
объект, атрибуты которого нужно заполнить, например модель
базы данных или произвольный класс.
Синтаксис
form.populate_obj(obj)
Пример
Давайте создадим форму с двумя полями и заполним
данными из неё объект класса User:
from flask import Flask
from flask_wtf import FlaskForm
from wtforms import StringField, IntegerField
app = Flask(__name__)
app.secret_key = 'abcde'
class UserForm(FlaskForm):
name = StringField('Name')
age = IntegerField('Age')
class User:
pass
@app.route('/', methods=['POST'])
def index():
form = UserForm()
user = User()
form.populate_obj(user)
return user.name + ' ' + str(user.age)
Результат выполнения кода для данных name=abcde и age=25:
<+html+>
abcde 25
<-html+>
Пример
Давайте применим метод populate_obj к форме,
связанной с моделью базы данных, чтобы обновить запись:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField
app = Flask(__name__)
app.secret_key = 'abcde'
class ArticleForm(FlaskForm):
title = StringField('Title')
class Article:
def __init__(self, title):
self.title = title
@app.route('/', methods=['GET', 'POST'])
def index():
article = Article('article')
form = ArticleForm(obj=article)
if form.validate_on_submit():
form.populate_obj(article)
return render_template('index.html', title=article.title)
return render_template('index.html', title=article.title)
Шаблон для вывода заголовка статьи:
<+jinja+>
{{ title }}
<-jinja+>
Результат выполнения кода после отправки формы со значением hello:
<+html+>
hello
<-html+>
Смотрите также
-
класс
Form,
от которого наследуются все формы WTForms -
метод
validate,
который проверяет данные формы -
метод
validate_on_submit,
который проверяет отправку и валидацию формы -
атрибут
data,
который хранит словарь со значениями полей формы