wagtail 主搜索 add modelAdmin models

wagtail main search add modelAdmin models

在徽标下方的左侧边栏顶部,关于 wagtail 主要搜索的快速问题。 默认情况下,搜索框搜索页面、图像、文档、用户。

两个问题: 有没有办法修改该搜索范围,使其也包括 modelAdmin 模型? 有没有办法从搜索查询列表中删除页面,以便它只搜索图像、文档和用户?

我似乎无法在文档中找到任何关于它的信息。我知道您可以在模型管理列表视图中搜索 modelAdmin 模型一次,我有这个工作。我只是在寻找一种方法来扩展该搜索,使其也包含在主侧边栏搜索中。

如果您能提供任何指导,我们将不胜感激。

管理搜索区域确实显示了多个项目,例如页面、图像、文档等

但是,这个页面只搜索page个模型,当你点击其他模型(例如图像)时,它会带你到图像搜索页面,它还会附加查询参数q 基于任何现有搜索。

所以澄清一下,此页面仅搜索页面并搜索其他项目,它会将您带到 Wagtail 管理中的其他地方。

希望下面的内容能回答您的具体场景问题。

1。修改 admin/pages 搜索范围或结果

  • 这可以通过自己的观点来完成,但这并不简单
  • 可以在这里看到search查看功能https://github.com/wagtail/wagtail/blob/master/wagtail/admin/views/pages.py#L958
  • 您可以通过修改 urls.py 将 admin/pages/search/ 页面定向到您的自定义视图来重定向任何 URL。
  • 但是,您可能需要重写 (copy/paste) 大部分视图,因为它是一个函数,而不是 class 视图

2。添加自定义搜索区域

3。删除搜索区域

  • 隐藏 'other searches' 列表中的一项的最简单方法是 CSS 更改
  • 下一个最佳方法是使用覆盖自定义模板 wagtail/admin/templates/wagtailadmin/shared/search_other.html,然后过滤结果
  • 我不知道有什么方法可以在不进行猴子修补的情况下删除挂钩或已注册的挂钩,但是挂钩会被收集并存储为 admin_search_areas 您可以在此处查看代码 - https://github.com/wagtail/wagtail/blob/master/wagtail/admin/search.py#L102

使用 register_admin_search_area 钩子的示例代码

这基本上使用了文档示例,但让您大致了解如何使用此功能转到特定的 ModelAdmin 索引视图。注意:这不会搜索所有 ModelAdmin 模型,只会搜索一个特定的模型。

尽管如此,您始终可以制作自定义搜索页面来一次搜索所有模型。

from wagtail.core import hooks
from wagtail.admin.search import SearchArea

# ...

@hooks.register('register_admin_search_area')
def register_model_admin_search_area():
    # PeopleModelAdmin is a ModelAdmin also in the same hooks file
    index_url = PeopleModelAdmin().url_helper.index_url
    return SearchArea(
        'People ModelAdmin',
        index_url,
        classnames='icon icon-user',
        order=10000
    )


@hooks.register('register_admin_search_area')
def register_snippets_search_area():
    url = reverse('wagtailsnippets:list', args=('base', 'people'))
    return SearchArea(
        'People Snippets',
        url,
        classnames='icon icon-user',
        order=10000
    )