我试图找到一种方法来覆盖wagtail管理主页上“等待审核的页面”面板中显示的内容。我在网站前端的内容结构如下:
首页
我有三种类型的用户-您的常规管理员/超级用户,每个组织的主持人和常规员工。
所有普通员工在“人员”部分都有个人资料,可以登录和编辑自己的个人资料,但不能发布。他们只是将其提交审核。
版主可以在其组织内编辑/发布任何内容。例如,如果您属于“组织A主持人”组,则您对组织A页面及其站点树下面的任何内容都具有权限,在“人员”部分中也具有任何权限。您不能编辑其他组织的任何内容。
由于人员个人档案可以属于多个组织(这是通过ParentalManyToMany关系处理的),因此我无法在导航中将所有人员嵌套在其组织下。因此,我还没有找到仅授予主持人组织下的人员编辑权限的方法。但是我认为我可以通过限制主持人的“等待审阅的页面”队列来解决这个问题,从而使查询仅返回与其组织相关的项目。
我不知道是需要删除wagtailadmin的home.py设置的PagesForModerationPanel并将其替换为具有自定义查询逻辑的我自己的面板,还是我可以以某种方式覆盖该类而无需删除和替换面板。
https://docs.wagtail.io/en/latest/reference/hooks.html给出了一个简单的示例,说明如何将欢迎面板添加到管理主页。我能够做到这一点。我还想出了如何删除wagtail_hooks.py中现有的审核面板:
@hooks.register('construct_homepage_panels')
def remove_moderation_panel(request, panels):
for panel in panels:
if panel.name == 'pages_for_moderation':
panels.remove(panel)
但是,当我尝试在wagtail_hooks.py中定义自己的面板类,然后将其添加到主页时,它不起作用。以下代码(目前与wagtailadmin的home.py具有相同的查询逻辑;我尚未对其进行更改)导致错误:
class OrgPagesForModerationPanel:
name = 'pages_for_moderation'
order = 200
def __init__(self, request):
self.request = request
user_perms = UserPagePermissionsProxy(request.user)
self.page_revisions_for_moderation = (user_perms.revisions_for_moderation()
.select_related('page', 'user').order_by('-created_at'))
def render(self):
return render_to_string('wagtailadmin/home/pages_for_moderation.html', {
'page_revisions_for_moderation': self.page_revisions_for_moderation,
}, request=self.request)
@hooks.register('construct_homepage_panels')
def add_org_moderation_panel(request, panels):
panels.append(OrgPagesForModerationPanel())
我是在语法上执行了错误的操作,还是在错误的文件中尝试执行此操作?我尝试了其他技巧,例如重新排列我的“家庭”应用和“ wagtail.admin”的顺序,这些都包含在我的INSTALLED_APPS中,但这似乎没有什么改变。
这是我第一次尝试自定义wagtail管理员,以解决更复杂的用户工作流程,因此我想我可能会完全把错误的树吠叫,并且有一种在不覆盖审问队列的情况下进行处理的方法。
答案 0 :(得分:0)
由于已定义了接受__init__
参数的request
方法,因此在构造面板时需要传递请求。
@hooks.register('construct_homepage_panels')
def add_org_moderation_panel(request, panels):
panels.append(OrgPagesForModerationPanel(request))