Převést proměnnou do třídy proměnné (ani ponětí, co si jen vzpomenete)

hlasů
0

Použitím

  • Baňka
  • Baňka-sqlalchemy
  • Sqlalchemy
  • jQuery
  • Datatables (jQuery plugin)
  • Jeditable (jQuery plugin)

Vezměme si tento návod třídu (jako vystřižená z baňky-sqlalchemy dokumentů):

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    def __repr__(self):
        return '<User %r>' % self.username

Tyto datatables dělá žádost o Ajax a naplní tabulku. Každý td pak je vyroben upravovat na místě jeditable. Jakmile td je upraven, jeditable je požadavek POST k localhost / upravit obsahující:

  • Řádek id (stejný id z třídy uživatele)
  • Nová modifikovaná hodnota
  • Sloupec tabulky, který byl pozměněn (pro účely tohoto argumentu předpokládejme, že existují tři sloupce id / username / email) (int)

Nyní bych chtěl, aby ve funkci, která zpracovává localhost / upravit i vzít řádku id, aby se objekt uživatele a dotaz db pro tento konkrétní řádek, co vlastnost je třeba změnit, upravit ji s novou hodnotou a zavázat k db. Tady je to, co jsem dostal tak daleko:

@app.route('/modify', methods=['GET', 'POST'])
def modify()
    if request.method == 'POST' :
        user = user.query.get(form.row_id)
        if form.column_id == int(0):
            user.id = form.value
        elif form.column_id == int(1):
            user.username = form.value
        elif form.column_id == int(2):
            user.email = form.value
        else:
            pass
        db.session.commit()
    return 'ok'

Tímto způsobem, ano, to funguje, ale theremust být amore krásné přístupu. Ten se nezdá být moc ... pythonic

Mihai

Položena 17/07/2011 v 16:20
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
2

Použijte mapu sloupci ID na název atributu.

colmap = {
    0: 'id',
    1: 'username',
    2: 'email',
}

@app.route('/modify', methods=['GET', 'POST'])
def modify()
    if request.method == 'POST' :
        user = user.query.get(form.row_id)
        try:
            setattr(user, colmap[form.column_id], form.value)
        except KeyError:
            pass
        db.session.commit()
    return 'ok'
Odpovězeno 17/07/2011 v 16:25
zdroj uživatelem

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