Flask-Flask-WTFとFlask-Sqlalchemyを組み合わせてDBモデルを編集するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3850742

質問

既存のモデルの編集ページを作成しようとしています(すでにDBに保存されています)。フォームオブジェクトは、マルチディクトインスタンスがそのフィールドに入力することを期待しています。これが私が持っているものです:

# 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」を渡します。これにより、モデルプロパティがフォームフィールドに結合して、デフォルト値を提供します。

@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」メソッドにも注意してください。これは、フォーム値をモデルプロパティにバインドする便利なショートカットです(フォームで定義したフィールドのみ、非常に安全に使用できます)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top