2013-08-27 11 views
6

ho questo codice e il metodo all() ed ogni altro metodo funziona su questo e ho guardato tutto e ho potuto che il metodo paginate() funziona su BaseQuery che è anche QueryFlask SQLAlchemy errore di impaginazione

@app.route('/') 
@app.route('/index') 
@app.route('/blog') 
@app.route('/index/<int:page>') 
def index(page = 1): 
    posts = db.session.query(models.Post).paginate(page, RESULTS_PER_PAGE, False) 
return render_template('index.html', title="Home", posts=posts) 

ma questo mi dà l'errore AttributeError: 'Query' object has no attribute 'paginate' Ho cercato ovunque e non riesco a trovare alcuna soluzione a questo.

risposta

18

Dalla tua domanda ...

that the method paginate() works on BaseQuery which is also Query 

Penso che questo è dove sei stato confuso. "Query" si riferisce all'oggetto SQLAlchemy Query. "BaseQuery" si riferisce all'oggetto Flask-SQLALchemy BaseQuery, che è una sottoclasse di Query. Questa sottoclasse include helper come first_or_404() e paginate(). Tuttavia, ciò significa che un oggetto Query NON ha la funzione paginate(). Il modo in cui si crea l'oggetto che si chiama oggetto "Query" dipende dal fatto che si tratti di un oggetto Query o BaseQuery.

In questo codice, hai trovato l'oggetto SQLAlchemy Query, che si traduce in un errore:

db.session.query(models.Post).paginate(...) 

Se si utilizza il codice riportato di seguito, si ottiene l'impaginazione che stai cercando, perché hai a che fare con un oggetto BaseQuery (da Flask-SQLAlchemy) piuttosto che un oggetto Query (da SQLAlchemy).

models.Post.query.paginate(...) 
+1

Grazie ha funzionato! Stavo davvero diventando confuso tra i due. Questo ha chiarito per me :) – adarsh

Problemi correlati