如何为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
相关产品推荐
相关产品推荐

