我正在使用带有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。
答案 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-WTF和WTForms-Alchemy。