有一种简单的方法可以在零售版中将复制按钮添加到非页面模型的IndexListing中?

时间:2018-11-29 00:05:52

标签: wagtail

我有一个Snippet模型,正在使用ModelAdmin在Wagtail中创建,编辑和列出。我想创建一个复制函数,我可以看到wagtail为Page对象提供了开箱即用的支持:

enter image description here

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

1 个答案:

答案 0 :(得分:1)

有可能实现这一目标。但是,这将需要自定义代码,并在不同位置进行各种覆盖和添加。以下是一些应该对您有帮助的步骤,其中包含指向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. 通过子类化ButtonHelper创建一个自定义wagtail.contrib.modeladmin.helpers.ButtonHelper类。
  2. 向其中添加一个copy_button()方法,该方法可以提供创建按钮的所有必要详细信息。例如:https://github.com/rkhleics/wagtailmenus/blob/master/wagtailmenus/modeladmin.py#L38/
  3. 根据用户的权限(例如https://github.com/rkhleics/wagtailmenus/blob/master/wagtailmenus/modeladmin.py#L49),重写get_buttons_for_obj()方法以将列表中的复制按钮与其他按钮一起输出
  4. 最后,通过更改button_helper_class属性以引用您的自定义类,使您的ModelAdmin类使用自定义的ButtonHelper而不是默认的自定义类。

如果您想进一步了解wagtail.contrib.modeladmin中的所有各个类,建议您阅读Wagtail官方文档中的modeladmin customisation primer页面。