gpt4 book ai didi

python - Flask - 如何结合 Flask-WTF 和 Flask-SQLAlchemy 来编辑数据库模型?

转载 作者:太空狗 更新时间:2023-10-29 16:53:15 24 4
gpt4 key购买 nike

我正在尝试为现有模型(已保存到数据库)创建一个编辑页面。表单对象需要一个 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)

我可以将表单中的每个字段分配给模型的每个字段 (form.data['name'] = person.name, etc...),但这对于大型楷模。我是否缺少任何快捷方式?

最佳答案

请引用 wtforms 文档:

http://wtforms.simplecodes.com/docs/0.6/forms.html#wtforms.form.Form

您传入“obj”作为参数。这会将模型属性绑定(bind)到表单字段以提供默认值:

@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)

另请注意“populate_obj”方法。这是一个方便的快捷方式,它将表单值绑定(bind)到模型属性(仅限您在表单中定义的那些字段,因此使用起来非常安全)。

关于python - Flask - 如何结合 Flask-WTF 和 Flask-SQLAlchemy 来编辑数据库模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3850742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com