我需要做相当于...'admin.site.unregister(Value)',但对于使用 wagtail_hooks.py 中的'modeladmin_register(Value)' 向 wagtailmodeladmin 注册的模型。你是怎样做的?
问问题
813 次
3 回答
1
没有内置的方法可以做到这一点,但是如果您想添加自己的方法:
# helpers.py
from wagtail import hooks
def replace_hook(hook_name, original_fn):
hooks._hooks[hook_name].remove((original_fn, 0))
def inner(fn):
hooks.register('register_page_listing_buttons', fn)
return fn
return inner
假设我们想从列表视图中删除除“添加子页面”之外的所有按钮:
# wagtail_hooks.py
import helpers
@replace_hook('register_page_listing_buttons', page_listing_buttons)
def remove_redundant_buttons(page, page_perms, is_parent=False):
buttons = page_listing_buttons(page, page_perms, is_parent)
if isinstance(page, models.BasePage):
return buttons
else:
# for non-subclasses-of-BasePage allow only adding children
allowed_urls = ['add_subpage']
return [
item for item in buttons
if item.url and resolve(item.url).url_name in allowed_urls
]
结果:
于 2018-04-13T10:29:02.807 回答
1
我没有在 wagtail 中找到这种能力,但就我而言,从主菜单中排除模型就足够了,所以我接下来做了:
@hooks.register('construct_main_menu')
def hide_longlaw_order(request, menu_items):
menu_items[:] = [item for item in menu_items if 'longclaworders' not in item.url]
于 2019-07-27T16:05:55.963 回答
0
我知道这是一个老问题,但简短的回答是“没有取消注册的等价物”。
在标准 Django 中,您在 Django 管理区域中看到的所有模型都以类似的方式注册,因此在此处取消注册是有意义的。在 Wagtail 中,管理区域是完全自定义的,并且“modeladmin”不像 Django 的类似解决方案那样是管理架构的核心。Wagtail 中的各种应用程序不使用导入/使用它来注册自己的模型。因此,无法使用 modeladmin 来“取消注册”任何这些应用程序。“modeladmin”应用程序只是一个实用工具,可帮助您为其他模型添加接口,而无需了解 wagtail 提供的所有各种钩子来执行此类操作。
因此,'modeladmin' 仅用于注册自定义模型,对 'unregister' 方法的需求大大减少,因为在大多数情况下,您将通过 modeladmin_register 方法控制要注册的模型,所以你应该能够“不注册”那些。
于 2017-02-05T10:04:38.317 回答