Python Wagtail Admin:如何控制提交更改以进行审核后将用户重定向到何处

Python Wagtail Admin:如何控制提交更改以进行审核后将用户重定向到何处,python,django,wagtail,wagtail-admin,Python,Django,Wagtail,Wagtail Admin,在我构建的Wagtail站点上,我有一个模型类型,可由没有完全管理员权限的经过身份验证的用户编辑。他们只能保存为草稿或提交更改以供审核。我遇到的问题是,Wagtail在执行这两个操作后重定向到哪里是不一致的。保存草稿会将用户带回到刚刚打开的编辑屏幕,并显示一条注释,说明草稿已保存(良好)。提交以进行调节将用户返回到父页面的管理浏览视图,该视图显示列表中的所有同级节点。他们无法编辑该列表中的绝大多数项目,因此我认为这对于非管理员用户来说是令人困惑的。我希望“Submit for Moderatio

在我构建的Wagtail站点上,我有一个模型类型,可由没有完全管理员权限的经过身份验证的用户编辑。他们只能保存为草稿或提交更改以供审核。我遇到的问题是,Wagtail在执行这两个操作后重定向到哪里是不一致的。保存草稿会将用户带回到刚刚打开的编辑屏幕,并显示一条注释,说明草稿已保存(良好)。提交以进行调节将用户返回到父页面的管理浏览视图,该视图显示列表中的所有同级节点。他们无法编辑该列表中的绝大多数项目,因此我认为这对于非管理员用户来说是令人困惑的。我希望“Submit for Moderation”操作能够检测用户是否属于admin以外的组(或者,如果不属于admin,则页面是否有未发布的更改,如下面的代码示例所示),如果是,则将其重定向回编辑屏幕,就像“另存为草稿”一样

我在模型定义中尝试了这一点,但没有成功:

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/')

我可能需要挂接并覆盖一些摇摆管理操作,而不是试图在models.py中实现这一点,但我对此没有太多经验,因此我需要更好地了解要更改的内容和位置。

在创建页面后设置
,在编辑页面后设置
挂接:

为此,请在项目中的一个应用程序中添加一个
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/')

谢谢这非常有效,我已经为另一个目的设置了一些摇尾钩子,所以这非常容易实现。起初,我得到一个错误,说没有定义HttpResponseRedirect,但很容易从django.http查找如何包含它。