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

时间:2016-01-15 17:42:48

标签: flask sqlalchemy wtforms

我正在使用带有WTForms和SQLAlchemy的Flask。我目前有这个设置:

SQLAlchemy类:

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类?由于表单中的字段与构造函数中的字段相同,因此在用户数据库表中会很好。

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

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

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

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

1 个答案:

答案 0 :(得分:5)

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

my_model = # ...

form = CreateUserForm(obj=my_model)

要从填充的表单设置模型,例如回复后,请使用以下内容:

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

请参阅WTForms上的文档。另请考虑使用Flask-WTFWTForms-Alchemy