首页 > 解决方案 > 有没有一种简单的方法可以将复制按钮添加到 wagtail 中非页面模型的 IndexListing 中?

问题描述

我有一个片段模型,我正在使用 ModelAdmin 在 Wagtail 中创建、编辑和列出。我想创建一个复制功能,我可以看到 wagtail 支持开箱即用的Page对象:

在此处输入图像描述

在我编写自定义代码来执行此操作之前,我想我会问是否有任何方法可以在 Wagtail 中轻松执行此操作。我没有找到任何可以轻松添加更多按钮的钩子,虽然我确实找到了 modeladmin-list-display-add-buttons,但它似乎只允许我更改默认编辑和删除按钮的位置。

标签: wagtail

解决方案


有可能实现这一点。但是,它将需要自定义代码,以及不同位置的各种覆盖和添加。以下是一些可以帮助您的步骤,其中包含一些指向 wagtailmenus 扩展中的示例代码的链接,它们可以执行此操作:

添加自定义视图:

  1. 创建一个自定义CopyView视图(子类化wagtail.contrib.modeladmin.views.EditView可能是您最好的起点)。为了获得灵感,您可能想看看我为 wagtailmenus 创建的一个:https ://github.com/rkhleics/wagtailmenus/blob/master/wagtailmenus/views.py#L141
  2. 通过添加实例化自定义视图的方法,将视图与您的ModelAdmin类集成。copy_view()例如: https ://github.com/rkhleics/wagtailmenus/blob/master/wagtailmenus/modeladmin.py#L78
  3. 覆盖你的ModelAdmin类的get_admin_urls_for_registration()方法,使视图可以通过 URL 访问。例如:https ://github.com/rkhleics/wagtailmenus/blob/master/wagtailmenus/modeladmin.py#L82

让按钮显示在列表中:

  1. 通过子类化创建自定义ButtonHelperwagtail.contrib.modeladmin.helpers.ButtonHelper
  2. 向其中添加一个copy_button()方法,该方法可以提供创建按钮所需的所有详细信息。例如:https ://github.com/rkhleics/wagtailmenus/blob/master/wagtailmenus/modeladmin.py#L38/
  3. get_buttons_for_obj()根据用户的权限(例如https://github.com/rkhleics/wagtailmenus/blob/master/wagtailmenus/modeladmin.py#L49)覆盖在列表中输出复制按钮的方法以及其他按钮
  4. 最后,通过更改属性以引用您的自定义类,让您的ModelAdmin类使用您的自定义而不是默认类。ButtonHelperbutton_helper_class

如果您想更多地了解 中的所有各种类wagtail.contrib.modeladmin,我建议您阅读官方 Wagtail 文档中的modeladmin 自定义入门页面。


推荐阅读