2012-11-07 28 views
3

我正在爲我的模型添加分頁功能。我可以用mixin中的方法做到這一點,我想我理解在這種情況下分頁是什麼,但我希望添加查詢,以便我可以在任何地方傳遞分頁,而不用硬編碼模型方法,也不需要混合:接口與Sqlalchemy查詢對象擴展,自定義查詢類型

Mymodel.query.filter(Mymodel.attr=='X').paginate(**args, **kwargs) 

燒瓶SQLAlchemy的做到這一點,但我不使用,雖然我已經超過它嘗試提取一些功能。

所以,如果我有這樣的事情方法:

def paginate(self, page, per_page=20): 
     items = self.limit(per_page).offset((page - 1) * per_page).all() 
     return Pagination(self, page, per_page, self.count(), items) 

如何插入的東西與進出的SQLAlchemy的查詢鏈的接口?我有點做,也沒有關注在flask-sqlalchemy中如何完成它,但我想提取/學習如何做到這一點,並更好地控制將來的查詢,提煉我對sqlalchemy的使用,所以我不完全知道我要去哪裏,只是問一個問題,然後從那裏出發。

長答案:繼續閱讀sqlalchemy文檔和代碼,直到我獲得更多的理解。我期望擴展orm.Query - 我已經完成了,但是我沒有看到如何將它與我的項目綁定,因爲我不瞭解sqlalchemy的基本機制,但我認爲我只需要將我的分頁查詢添加到我正在使用的聲明性基礎庫中,但是一旦我開始重新開始工作就會看到它。

回答

-2

你讀過這個了嗎?

http://packages.python.org/Flask-SQLAlchemy/api.html?highlight=pagination#flask.ext.sqlalchemy.Pagination

它清楚地解釋了使用分頁與燒瓶內SQLAlchemy的擴展,你這樣做:

class flask.ext.sqlalchemy.Pagination(query, page, per_page, total, items)¶ 

在特定情況下,你可以這樣做:

myquery = Mymodel.query.filter(Mymodel.attr=='X') 
pagination = Pagination(myquery,page,per_page,total,items) 

然後在你的模板中,你可以使用這個分頁對象來渲染使用render_pagination()宏

+0

這個我理解並且沒有問題,所以也許我應該澄清。我希望能夠操作查詢對象,以便在鏈中的任意點使用「分頁」。 Basequery.paginate返回這個,我已經有了Paginate類的想法。換句話說,我想避免對每個模型的小p分頁查詢進行硬編碼,而是建立一種擴展orm.Query *的方式,就像*我看到了flask-sqla。我希望自己做Basequery.paginate,作爲我正在做的一部分,而不需要經過Flask-Sqlalchemy的環節。 – blueblank

相關問題