将表单数据直接传递给 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 处的文档。
我将 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 处的文档。