Wagtail Django API:如何同时实现排序与过滤并修复属性错误
解决Wagtail API中同时实现过滤和排序的问题
你的错误原因有两个:
get_queryset方法必须返回单个QuerySet对象,但你返回了一个包含两个对象的元组,导致框架无法识别处理。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
相关产品推荐
相关产品推荐

