wagtail主搜索添加modelAdmin模型。

问题描述 投票:0回答:1

关于logo下方左侧侧边栏顶部的wagtail主搜索的快速问题。默认情况下该搜索框可以搜索页面、图片、文档、用户。

有两个问题。有没有办法修改搜索范围,让它也包括modelAdmin模型? 有没有办法从搜索查询列表中删除页面,让它只搜索图片、文档、用户?

我似乎在文档中找不到任何关于它的内容。我知道你可以在模型管理列表视图中搜索一次modelAdmin模型,我有这个功能。我只是在寻找一种方法来扩展这种搜索,使其也包含在主侧栏搜索中。

如果您能提供任何方向,我将非常感激。

python django search wagtail
1个回答
1
投票

管理员搜索区确实可以显示多个项目,如页面、图片、文档等。

但是,这个页面只搜索 page 模型,当你点击其他模型(如图片)时,它会带你到图片搜索页面,还会附加查询参数 q 的基础上进行搜索。

所以要说明的是,这个页面只搜索页面,如果要搜索其他项目,会把你带到鹡鸰管理的其他地方。

希望下面的内容能回答你的具体方案问题。

1. 修改 admin/pages 搜索范围

  • 这有可能通过自己的观点来实现,但这并不简单。
  • 你可以看到 search 查看功能 https:/github.comwagtailwagtailblobmasterwagtailadminviewspages.py#L958。
  • 你可以通过修改你的urls.py来重定向任何一个URL,使其直接指向 admin/pages/search/ 页面到您的自定义视图。
  • 然而,您可能需要重新编写(复制粘贴)大部分的视图,因为它是一个函数,而不是类视图。

2. 添加自定义搜索区域

3. 删除搜索区域

  • 隐藏 "其他搜索 "列表中的一个项目的最简单方法是修改CSS
  • 下一个最好的方法是自定义模板。wagtail/admin/templates/wagtailadmin/shared/search_other.html 覆盖,然后过滤结果
  • 我不知道有什么方法可以在不打补丁的情况下删除钩子或注册的钩子,但钩子会被收集并存储为 admin_search_areas 你可以在这里看到代码 - https:/github.comwagtailwagtailblobmasterwagtailadminsearch.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
    )
© www.soinside.com 2019 - 2024. All rights reserved.