Метод populate_obj
Метод populate_obj применяется к экземпляру формы
FlaskForm после успешной валидации. Первым параметром
передаётся объект, в атрибуты которого нужно записать
значения полей формы. Метод перебирает все поля формы
и присваивает одноимённым атрибутам объекта очищенные
данные из data каждого поля.
Если у объекта нет атрибута с именем поля, он будет
создан. Метод не выполняет валидацию - предполагается,
что форма уже проверена через validate_on_submit
или validate.
Синтаксис
form.populate_obj(obj)
Пример
Давайте создадим форму с полем name и перенесём
её данные в объект User:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class MyForm(FlaskForm):
name = StringField('Name', validators=[DataRequired()])
submit = SubmitField('Send')
class User:
pass
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm()
user = User()
if form.validate_on_submit():
form.populate_obj(user)
return user.name
return render_template('index.html', form=form)
Шаблон для вывода формы:
<form method="post">
{{ form.hidden_tag() }}
<p>{{ form.name.label }} {{ form.name() }}</p>
<p>{{ form.submit() }}</p>
</form>
После отправки формы со значением 'abcde'
результат выполнения кода:
abcde
Пример
Давайте заполним объект с несколькими атрибутами из формы с двумя полями:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, IntegerField, SubmitField
from wtforms.validators import DataRequired
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class MyForm(FlaskForm):
login = StringField('Login', validators=[DataRequired()])
age = IntegerField('Age')
submit = SubmitField('Send')
class Profile:
pass
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm()
profile = Profile()
if form.validate_on_submit():
form.populate_obj(profile)
res = profile.login + ' ' + str(profile.age)
return res
return render_template('index.html', form=form)
Шаблон для вывода формы:
<form method="post">
{{ form.hidden_tag() }}
<p>{{ form.login.label }} {{ form.login() }}</p>
<p>{{ form.age.label }} {{ form.age() }}</p>
<p>{{ form.submit() }}</p>
</form>
После отправки формы со значениями 'user' и 25
результат выполнения кода:
user 25
Смотрите также
-
класс
FlaskForm,
который представляет форму Flask -
метод
validate_on_submit,
который проверяет отправку и валидность формы -
метод
validate,
который выполняет валидацию формы -
атрибут
data,
который хранит очищенные данные формы