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

如何为Wagtail PageListingViewSet指定默认排序规则

为Wagtail PageListingViewSet设置默认多层排序

由于PageListingViewSet并未直接提供ordering属性配置,我们可以通过自定义视图类并重写查询集的方式,遵循Django的排序规范实现多层排序,具体步骤如下:

1. 自定义页面列表视图类

继承Wagtail的PageListingView,重写get_queryset方法,在其中添加符合Django规范的多层排序规则:

from wagtail.admin.views.pages import PageListingView

class CustomSortedPageListingView(PageListingView):
    def get_queryset(self):
        # 先获取默认查询集
        queryset = super().get_queryset()
        # 应用多层排序:例如按发布时间倒序,再按标题正序
        return queryset.order_by('-first_published_at', 'title')

2. 自定义PageListingViewSet子类

指定视图集使用上面的自定义列表视图:

from wagtail.admin.viewsets.pages import PageListingViewSet

class CustomPageListingViewSet(PageListingViewSet):
    # 绑定自定义的排序视图
    list_view_class = CustomSortedPageListingView

3. 注册自定义视图集

通过Wagtail的钩子注册这个视图集,替换成你的目标页面模型:

from wagtail import hooks
from yourapp.models import YourPageModel  # 替换为你的页面模型

@hooks.register('register_admin_viewset')
def register_custom_page_listing():
    return CustomPageListingViewSet(
        model=YourPageModel,
        name='sorted_page_listing',
        menu_label='排序后的页面列表',
        menu_icon='doc-full-inverse',
    )

说明

  • 排序规则完全遵循Django的ordering规范:字段名前加-表示倒序,多个字段用逗号分隔实现多层排序。
  • 这种方式仅对当前视图集的页面列表生效,不会影响模型其他场景下的查询排序。

内容的提问来源于stack exchange,提问作者Brylie Christopher Oxley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 04:16:03