如何在Wagtail默认后台页面中添加列表筛选器与搜索字段
当然可以!完全不需要自定义ModelAdmin
你完全可以在继承Page的模型中添加自定义搜索字段和列表筛选器,并且继续使用Wagtail默认的页面后台界面。下面结合你的代码详细说明:
一、搜索字段:你的配置已经正确生效
你在FolderPage中定义的search_fields是完全正确的:
search_fields = Page.search_fields + [ index.SearchField('body'), index.SearchField('title'), index.FilterField('live'), ]
index.SearchField:用于全文搜索,Wagtail后台顶部的全局搜索框,以及页面列表页的搜索框都会使用这些字段进行匹配;index.FilterField:标记该字段可用于筛选,为后续添加列表筛选器做准备。
现在你的body、title已经加入了搜索范围,live字段也具备了筛选能力。
二、添加列表筛选器:只需扩展admin_list_filters
要在Wagtail默认的页面列表页(比如你进入FolderPage的列表视图时)添加筛选器,只需要在模型中扩展admin_list_filters属性即可,不需要额外的ModelAdmin。
比如你想添加一个“是否已发布”的筛选器,修改你的模型代码如下:
from wagtail.admin.filters import BooleanFieldFilter class FolderPage(Page): body = StreamField([ ('paragraph', blocks.RichTextBlock()), ('embedded_video', EmbedBlock(icon='media')), ('table', TableBlock()), ], null=True, blank=True, verbose_name=u'Corpo da Notícia') search_fields = Page.search_fields + [ index.SearchField('body'), index.SearchField('title'), index.FilterField('live'), ] # 添加列表筛选器 admin_list_filters = Page.admin_list_filters + ( ('live', BooleanFieldFilter), )
这样,当你在后台查看FolderPage的页面列表时,右侧就会出现一个“Live”的筛选选项,可以快速筛选已发布/未发布的页面。
扩展更多筛选器
如果你的模型还有其他字段(比如日期字段publish_date),也可以添加对应的筛选器:
from wagtail.admin.filters import DateRangeFilter # 假设你的模型有publish_date字段 admin_list_filters = Page.admin_list_filters + ( ('live', BooleanFieldFilter), ('publish_date', DateRangeFilter), )
总结
- 搜索字段:通过
search_fields继承并扩展即可,Wagtail默认后台会自动识别并使用这些字段; - 列表筛选器:通过
admin_list_filters扩展,搭配对应的筛选器类,就能在默认页面列表页添加筛选功能; - 全程不需要自定义
ModelAdmin,完全沿用Wagtail原生的页面管理界面。
内容的提问来源于stack exchange,提问作者Rafael
相关产品推荐
相关产品推荐

