【问题标题】:Pass form data directly to SQLalchemy object?将表单数据直接传递给 SQLalchemy 对象?
【发布时间】:2016-01-15 17:42:48
【问题描述】:

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

一个 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。

【问题讨论】:

    标签: flask sqlalchemy wtforms


    【解决方案1】:

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

    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

    【讨论】:

    • 谢谢,我会试试的!只是为了好奇,为什么在大多数情况下它存在 Flask 的特殊包? Flask-WTF 比原来的包有什么更好的地方?
    • @theva - Flask-WTF 和 WTForms-Alchemy 都有助于减少样板代码 - 特别是当您的 Flask 项目变得越来越复杂时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多