我有一个Snippet模型,正在使用ModelAdmin在Wagtail中创建,编辑和列出。我想创建一个复制函数,我可以看到wagtail为Page
对象提供了开箱即用的支持:
在我编写自定义代码来执行此操作之前,我想问一下是否有任何方法可以在Wagtail中轻松进行此操作。我没有找到甚至可以轻松添加更多按钮的钩子,虽然确实找到了modeladmin-list-display-add-buttons,但似乎只允许我更改默认编辑和删除按钮的位置。
答案 0 :(得分:1)
有可能实现这一目标。但是,这将需要自定义代码,并在不同位置进行各种覆盖和添加。以下是一些应该对您有帮助的步骤,其中包含指向wagtailmenus扩展中某些示例代码的链接,它可以完成此操作:
添加自定义视图:
CopyView
视图(子类wagtail.contrib.modeladmin.views.EditView
可能是您的最佳起点)。为了获得启发,您可能需要看一看我为wagtailmenus创建的版本:https://github.com/rkhleics/wagtailmenus/blob/master/wagtailmenus/views.py#L141 ModelAdmin
方法,将视图与copy_view()
类集成。例如:
https://github.com/rkhleics/wagtailmenus/blob/master/wagtailmenus/modeladmin.py#L78 ModelAdmin
类的get_admin_urls_for_registration()
方法,以使该视图可通过URL访问。例如:https://github.com/rkhleics/wagtailmenus/blob/master/wagtailmenus/modeladmin.py#L82 获取要在列表中显示的按钮:
ButtonHelper
创建一个自定义wagtail.contrib.modeladmin.helpers.ButtonHelper
类。 copy_button()
方法,该方法可以提供创建按钮的所有必要详细信息。例如:https://github.com/rkhleics/wagtailmenus/blob/master/wagtailmenus/modeladmin.py#L38/ get_buttons_for_obj()
方法以将列表中的复制按钮与其他按钮一起输出button_helper_class
属性以引用您的自定义类,使您的ModelAdmin
类使用自定义的ButtonHelper
而不是默认的自定义类。如果您想进一步了解wagtail.contrib.modeladmin
中的所有各个类,建议您阅读Wagtail官方文档中的modeladmin customisation primer页面。