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

Wagtail Django API:如何同时实现排序与过滤并修复属性错误

解决Wagtail API中同时实现过滤和排序的问题

你的错误原因有两个:

  1. get_queryset方法必须返回单个QuerySet对象,但你返回了一个包含两个对象的元组,导致框架无法识别处理。
  2. filter_queryset方法的调用方式错误,它不接收字符串格式的过滤条件,该方法主要用于处理URL参数中的过滤逻辑,需传入request和待过滤的QuerySet。

要在代码中硬编码实现story_type=Story的过滤和按-first_published_at排序,直接对QuerySet进行链式调用即可,修改后的get_queryset方法如下:

def get_queryset(self):
    # 先获取父类的基础查询集,再链式调用过滤和排序
    return super().get_queryset().filter(story_type="Story").order_by("-first_published_at")

如果需要保留URL参数过滤的能力(比如用户仍可通过?story_type=XXX补充过滤),同时默认添加排序和基础过滤,可以这样写:

def get_queryset(self):
    # 获取经过URL参数过滤后的查询集
    queryset = super().get_queryset()
    # 添加硬编码的过滤条件
    queryset = queryset.filter(story_type="Story")
    # 添加排序规则
    queryset = queryset.order_by("-first_published_at")
    return queryset

这样既实现了默认过滤和排序,又保留了原有URL参数过滤的功能,同时返回合法的QuerySet对象,不会触发AttributeError。

内容的提问来源于stack exchange,提问作者Mohammad Fathi Rahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:25:22