【问题标题】:How to change order_by clause in Flask-SQLAlchemy based on dropdown box selection?如何根据下拉框选择更改 Flask-SQLAlchemy 中的 order_by 子句?
【发布时间】:2021-11-16 23:08:38
【问题描述】:

我想让我网站上的用户能够更改从我的数据库中查询获得的结果的顺序(例如按字母升序、按字母降序或通过其他参数)。

这是我要执行 order_by 的查询:

def get_curators_and_total_followers():
    total_playlist_followers =  db.session.query(SpotifyPlaylist.curator_id.label('user_id'), db.func.sum(SpotifyPlaylist.playlist_follower_count).label("total_followers"))\
        .outerjoin(User, SpotifyPlaylist.curator_id==User.id)\
        .group_by(User.id)\
        .subquery()
    curators = db.session.query(User, total_playlist_followers.c.total_followers)\
        .outerjoin(total_playlist_followers, User.id==total_playlist_followers.c.user_id)\
        .join(SpotifyPlaylist, SpotifyPlaylist.curator_id==User.id)\
        .order_by("This is where I want to change the fields")   
    return curators

如何设置默认值以便页面加载,然后根据带有几个不同 order_by 选项的下拉框为用户提供以不同方式显示结果的选项?

【问题讨论】:

    标签: flask sqlalchemy flask-sqlalchemy flask-wtforms


    【解决方案1】:
    def get_curators_and_total_followers():
        total_playlist_followers =  db.session.query(SpotifyPlaylist.curator_id.label('user_id'), db.func.sum(SpotifyPlaylist.playlist_follower_count).label("total_followers"))\
            .outerjoin(User, SpotifyPlaylist.curator_id==User.id)\
            .group_by(User.id)\
            .subquery()
        curators = db.session.query(User, total_playlist_followers.c.total_followers)\
            .outerjoin(total_playlist_followers, User.id==total_playlist_followers.c.user_id)\
            .join(SpotifyPlaylist, SpotifyPlaylist.curator_id==User.id)\
        
        order_by = form.get('orderBy')
        if order_by is None:
            curators.order_by("your default value")
        else:
            curators.order_by(order_by)
            
        return curators
    

    【讨论】:

    • 我将尝试实现这一点,但我不需要将“表单”传递给函数吗?
    • 确定您应该从请求中获取表单。
    • 我得到了它!唯一的问题是,一旦页面重新加载,我的下拉菜单中的选项就会重置。有什么建议吗?
    • python @app.route("/curators", methods=["GET", "POST"]) @login_required def curators(): user = get_user_by_email_or_404(current_user) form = None order_by_form = None curators = get_curators_and_total_followers(order_by_form) if request.method == "POST": order_by_form = request.form["order-by"] curators = get_curators_and_total_followers(order_by_form) return render_template("curators.html", title="Curators", curators=curators)
    猜你喜欢
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 2020-06-03
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多