Baňka - jak mohu kombinovat baňky, WTF a baňka-SQLAlchemy upravit db modely?

hlasů
14

Snažím se vytvořit stránku úprav pro existujícího modelu (již uložené na db). Objekt forma očekává multidict instance k naplnění svých polí. To je to, co mám:

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

Mohl bych přiřadit každé pole formuláře na každé pole modelu (form.data['name'] = person.name, etc...), ale to se zdá nadbytečná pro velké modely. Je nějaká zkratka mi chybí?

Položena 03/10/2010 v 18:16
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
25

Naleznete v dokumentaci wtforms:

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

Předáte v „obj“ jako argument. To bude vázat vlastnosti modelu na polích formuláře poskytnout výchozí hodnoty:

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

Všimněte si také jen „populate_obj“ metoda. Jedná se o šikovný zástupce, který bude vázat hodnot formuláře do vlastností modelu (pouze těch oblastech, které jste definovali v podobě, tak docela bezpečné použití).

Odpovězeno 05/10/2010 v 00:00
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more