4

モデルにページネーション機能を追加する作業を行っています。ミックスインのメソッドでこれを行うことができます。このコンテキストでのページネーションとは何かを理解していると思いますが、クエリを追加して、モデルメソッドをハードコーディングしたり、ミックスインを使用したりせずに、好きな場所にページネーションを渡すことができるようにしようとしています。 :

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の基礎となる仕組みを理解していないため、これをプロジェクトに結び付ける方法がまだわかりませんが、必要だと思います使用している宣言ベース Base にページネーション クエリを追加しますが、作業に戻ると表示されます。

4

1 に答える 1

-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()マクロを使用してレンダリングできます。

于 2012-11-07T20:22:00.550 に答える