Wagtail管理员:提交更改以进行审核后,如何控制用户重定向到的位置

问题描述

在我建立的Wagtail网站上,我具有可由不具有完整管理员特权的经过身份验证的用户编辑的模型类型。他们只能保存为草稿或提交更改以进行审核。我遇到的问题是,在执行这两个动作后,Wagtail对其重定向到的位置不一致。保存草稿会将用户带回到他们刚才所在的编辑屏幕,并带有一条注释,指出草稿已保存(好)。提交审核后,用户将返回父页面的管理浏览视图,该视图显示列表中的所有同级节点。他们无法编辑该列表中的绝大多数项目,因此我认为这对于非管理员用户来说很混乱。我想执行“提交审核”操作,以检测用户是否属于管理员以外的组(或者失败,页面是否具有未发布的更改,如下面的代码示例所示),如果是,则将其重定向回到编辑屏幕,就像“另存为草稿”一样。

我在模型定义中尝试了此操作,但没有成功:

def save(self,*args,**kwargs):
  #do some field value manipulations here before saving
  super().save(*args,**kwargs)
  if self.id:
    if self.has_unpublished_changes:
      return HttpResponseRedirect('/admin/pages/' + str(self.id) + '/edit/')

可能需要挂入并重写某种Wagtail管理员操作,而不是试图在models.py中完成此操作,但是我对此没有太多经验,因此我需要对什么内容有更好的了解改变和在哪里。

解决方法

设置一个after_create_pageafter_edit_page钩子:https://docs.wagtail.io/en/stable/reference/hooks.html#after-create-page

为此,请在项目中的一个应用程序中添加一个wagtail_hooks.py文件。您可以在此处定义通过管理员创建或编辑页面后要调用的函数,例如:

from wagtail.core import hooks

@hooks.register('after_create_page')
def redirect_after_page_create(request,page):
    if not request.user.is_superuser:
        return HttpResponseRedirect('/admin/pages/' + str(page.id) + '/edit/')

@hooks.register('after_edit_page')
def redirect_after_page_edit(request,page):
    if not request.user.is_superuser:
        return HttpResponseRedirect('/admin/pages/' + str(page.id) + '/edit/')