You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现点击按钮切换Django查询的order_by排序规则?

问题原因
  • 提交按钮未被<form>标签包裹,点击后不会触发POST请求,后端始终执行GET请求对应的排序逻辑
  • method是<form>标签的专属属性,写在<button>标签上不生效
  • Django默认要求POST请求携带CSRF令牌,缺少令牌会导致请求被拦截
修复方案

1. 修改publications.html模板代码

替换原有按钮部分为如下带form的代码即可实现点击按日期排序:

<form method="POST">
    {% csrf_token %}
    <button type="submit">按日期筛选</button>
</form>
<ol  class="text">
    {% for publication in publications %}
        <div>{{publication.text}}</div>
    {% endfor %}
</ol>

2. (可选)实现双向切换排序

如果需要点击按钮可以在两种排序规则之间来回切换,可以修改视图逻辑,用session存储当前排序状态:

def publications(request):
    # 初始化默认排序规则
    if 'sort_by' not in request.session:
        request.session['sort_by'] = 'contributors'
    
    # POST请求时切换排序规则
    if request.method == 'POST':
        request.session['sort_by'] = 'status_date' if request.session['sort_by'] == 'contributors' else 'contributors'
        # 标记session已修改确保更新
        request.session.modified = True
    
    # 按当前存储的规则排序
    publications = UserPublications.objects.all().order_by(request.session['sort_by'])
    context = {'publications': publications}
    return render(request, 'users/publications.html', context)

内容的提问来源于stack exchange,提问作者awawawaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:06:03