sa1*_*125 16 python forms sqlalchemy flask
我正在尝试为现有模型创建一个编辑页面(已保存到db).表单对象期望multidict实例填充其字段.这就是我所拥有的:
# the model - assumes Flask-SQLAlchemy
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True)
def __init__(self, name=name):
self.name = name
# the form - assumes Flask-WTF ext.
from flask.ext.wtf import Form, TextField, Required, BooleanField
class PersonForm(Form):
name = TextField('name')
## the view
@app.route('/person/edit/<id>/', methods=['GET', 'POST'])
def edit_person(id):
person = Person.query.get(id)
if person:
form = PersonForm(person) #<-- raises error
return render_template('edit_person.html', form=form)
Run Code Online (Sandbox Code Playgroud)
我可以将表单中的每个字段分配给模型的每个字段(form.data['name'] = person.name, etc...),但对于大型模型来说这似乎是多余的.我有什么捷径可走吗?
小智 28
请参阅wtforms文档:
http://wtforms.simplecodes.com/docs/0.6/forms.html#wtforms.form.Form
你传入"obj"作为参数.这会将模型属性绑定到表单字段以提供默认值:
@app.route('/person/edit/<id>/', methods=['GET', 'POST'])
def edit_person(id):
person = Person.query.get_or_404(id)
form = PersonForm(obj=person)
if form.validate_on_submit():
form.populate_obj(person)
Run Code Online (Sandbox Code Playgroud)
另请注意"populate_obj"方法.这是一个方便的快捷方式,它将表单值绑定到模型属性(只有您在表单中定义的那些字段,因此使用起来非常安全).
| 归档时间: |
|
| 查看次数: |
9621 次 |
| 最近记录: |