将表单数据直接传递给 SQLalchemy 对象?

Pass form data directly to SQLalchemy object?

我将 Flask 与 WTForms 和 SQLAlchemy 一起使用。我目前有这个设置:

一个 SQLAlchemy class:

class User(Base):
    __tablename__ = 'user'
    name = db.Column(db.String)
    last_name = db.Column(db.String)

    __init__(name, last_name):
        self.name = name
        self.last_name = last_name

对应形式:

class CreateUserForm(Form):
    name = StringField('Name')
    last_name = StringField('Last name')

路线:

@user.route('/', methods=['POST'])
def create():
    form = CreateUserForm(request.form)

    if form.validate():
        user = User(form.name.data, form.last_name.data)
        ...

这只是一个简化的示例,但我想知道我是否可以通过某种方式将表单变量传递给 User 构造函数,并一直传递给 SQLAlchemy 中的 User class?由于表单中的字段与构造函数中的字段和用户数据库中的字段相同table,那就太好了。

我希望我的路线看起来像这样:

@user.route('/', methods=['POST'])
def create():
    form = CreateUserForm(request.form)

    if form.validate():
        user = User(form)
        ...

所以我不必在每个部分处理form.name和form.last_name。

要从现有模型设置表单数据,请使用以下方法:

my_model = # ...

form = CreateUserForm(obj=my_model)

从填充的表单设置模型,例如在 post 返回后,使用以下内容:

form = CreateUserForm(request.form)
if form.validate_on_submit():
    user = User()
    form.populate_obj(user) # Copies matching attributes from form onto user

请参阅 WTForms. Also consider using Flask-WTF and WTForms-Alchemy 处的文档。