【问题标题】:Pagination with filters using Flask-Sqlalchemy使用 Flask-Sqlalchemy 使用过滤器进行分页
【发布时间】:2020-10-05 04:59:36
【问题描述】:

我正在尝试为我的一个视图设置分页,但结果被过滤了,我想知道如何做这样的事情。

products_product_name = Product.query.filter(Product.product_name.contains(search_name)).paginate(1, 20)

【问题讨论】:

  • 可以对来自 Flask-SQLAlchemy 的任何查询对象调用 paginate 方法。 flask_sqlalchemy.Pagination(query, page, per_page, total, items) 可以用来。 flask-sqlalchemy.palletsprojects.com/en/2.x/api
  • 但是如何在使用这样的过滤器的查询中使用它?
  • 哦,我想我基本上可以这样做,但只是一个与这个没有直接关系的问题,有没有办法可以显示当前和以前的分页页面立刻?顺便说一句,谢谢
  • 你应该看看blog.miguelgrinberg.com/post/…。他创建了一个查询,然后将其传递给另一个使用 order_by 的查询,并对其应用分页。但也许你可以在过滤方法之后直接应用分页。对于您的第二个问题:您可以通过更改 per_page 选项执行 2 个查询或执行更大的查询,以获得双倍的值。
  • 是的,但我的想法是在开始显示 20 时喜欢,然后当单击显示更多而不是切换页面时,它将显示 40,然后显示 60 等。但我想我可以使用 page 变量和每当查询显示 20*page_num

标签: python flask pagination flask-sqlalchemy


【解决方案1】:

你可以做到的:

model.query.filter_by(id=1).paginate(page=1, per_page=2)

【讨论】:

    【解决方案2】:

    您可以添加一些类似于这些的过滤逻辑:

    if args["seen"]:
        query = query.filter(Product.seen == args["seen"])
    if args["starred"]:
        query = query.filter(Product.starred == args["starred"])
    
    # Descending sort by the field specified
    if args["sort"].startswith("-"):
        field = args["sort"].replace("-", "")
        sort_by = getattr(Product, field).desc()
    else:
        sort_by = getattr(Product, args["sort"]).asc()
    query = query.order_by(sort_by).paginate(
        page=args["page"], per_page=args["per_page"]
    

    【讨论】:

    • 好吧,事实证明,我的基本做法是有效的(当我在“项目”之后放置 () 的项目对象时),但是像你的例子那样做有好处吗?
    • 我也不太清楚你的例子是如何工作的,但如果你有时间解释,我很乐意知道。
    猜你喜欢
    • 2019-07-22
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2019-07-21
    • 2016-07-01
    • 2018-12-25
    相关资源
    最近更新 更多