Flask - как мне объединить Flask-WTF и Flask-SQLAlchemy для редактирования моделей БД? - PullRequest
16 голосов
/ 03 октября 2010

Я пытаюсь создать страницу редактирования для существующей модели (уже сохраненной в БД).Объект формы ожидает, что мультидиктный экземпляр будет заполнять его поля.Вот что у меня есть:

# 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...), но это кажется избыточным для больших моделей.Есть ли какой-нибудь ярлык, который мне не хватает?

1 Ответ

28 голосов
/ 05 октября 2010

Пожалуйста, обратитесь к документации 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".Это удобный ярлык, который свяжет значения формы со свойствами модели (только те поля, которые вы определили в вашей форме, так что использовать их совершенно безопасно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...