Метод populate_obj
Метод populate_obj применяется к полю формы
и заполняет атрибуты указанного объекта значениями
из этого поля. Первым параметром передаётся объект,
в который нужно записать данные. Обычно это модель
или любой другой объект с подходящими атрибутами.
Метод не возвращает результат, а изменяет объект
непосредственно.
Чаще всего метод используется после успешной валидации формы, когда нужно перенести очищенные данные из полей в модель перед сохранением в базу данных.
Синтаксис
field.populate_obj(obj, name)
В качестве obj выступает объект, атрибут
которого нужно заполнить. Параметр name
задаёт имя атрибута, в который будет записано
значение поля.
Пример
Давайте создадим простое WTForms-поле и заполним им атрибут объекта:
from wtforms import StringField
class User:
pass
user = User()
field = StringField('name')
field.process_data('abcde')
field.populate_obj(user, 'name')
print(user.name)
Результат выполнения кода:
"abcde"
Пример
Давайте заполним сразу несколько атрибутов объекта через форму:
from wtforms import Form, StringField
class User:
pass
class UserForm(Form):
name = StringField('name')
city = StringField('city')
form = UserForm()
form.name.process_data('abcde')
form.city.process_data('article')
user = User()
form.name.populate_obj(user, 'name')
form.city.populate_obj(user, 'city')
print(user.name, user.city)
Результат выполнения кода:
"abcde article"
Пример
Давайте используем populate_obj во Flask
после валидации формы:
from flask import Flask, request
from wtforms import Form, StringField
app = Flask(__name__)
class User:
pass
class UserForm(Form):
name = StringField('name')
@app.route('/', methods=['POST'])
def index():
form = UserForm(request.form)
if form.validate():
user = User()
form.name.populate_obj(user, 'name')
return user.name
return 'invalid'
Результат выполнения кода для POST-запроса
со значением name=abcde:
abcde
Смотрите также
-
класс
Field,
который является базовым для всех полей формы -
метод
validate,
который проверяет корректность данных формы -
метод
process_formdata,
который обрабатывает данные из HTTP-запроса -
метод
process_data,
который обрабатывает данные по умолчанию