Wagtail 管理员:如何在提交更改以供审核后控制用户重定向的位置
Wagtail Admin: How to control where user is redirected after submitting changes for moderation
在我建立的 Wagtail 网站上,我有一个模型类型,可以由没有完全管理员权限的经过身份验证的用户编辑。他们只能保存为草稿或提交更改以供审核。我遇到的问题是 Wagtail 在执行这两个操作后重定向的位置不一致。保存草稿会将用户带回到他们刚刚所在的编辑屏幕,并显示一条说明草稿已保存(良好)的注释。提交审核 returns 用户进入父页面的管理浏览视图,该视图显示列表中的所有兄弟节点。他们无法编辑该列表中的绝大多数项目,因此我认为这会让非管理员用户感到困惑。我想让“提交审核”操作检测用户是否属于管理员以外的组(或者,如果失败,页面是否有未发布的更改,如下面的代码示例所示),如果是,则重定向它们像“另存为草稿”一样返回编辑屏幕。
我在我的模型定义中试过这个但没有用:
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_page
和 after_edit_page
挂钩:https://docs.wagtail.io/en/stable/reference/hooks.html#after-create-page
为此,请在项目的其中一个应用程序中添加一个 wagtail_hooks.py
文件。在这里你可以定义通过admin创建或编辑页面后调用的函数,例如:
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/')
在我建立的 Wagtail 网站上,我有一个模型类型,可以由没有完全管理员权限的经过身份验证的用户编辑。他们只能保存为草稿或提交更改以供审核。我遇到的问题是 Wagtail 在执行这两个操作后重定向的位置不一致。保存草稿会将用户带回到他们刚刚所在的编辑屏幕,并显示一条说明草稿已保存(良好)的注释。提交审核 returns 用户进入父页面的管理浏览视图,该视图显示列表中的所有兄弟节点。他们无法编辑该列表中的绝大多数项目,因此我认为这会让非管理员用户感到困惑。我想让“提交审核”操作检测用户是否属于管理员以外的组(或者,如果失败,页面是否有未发布的更改,如下面的代码示例所示),如果是,则重定向它们像“另存为草稿”一样返回编辑屏幕。
我在我的模型定义中试过这个但没有用:
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_page
和 after_edit_page
挂钩:https://docs.wagtail.io/en/stable/reference/hooks.html#after-create-page
为此,请在项目的其中一个应用程序中添加一个 wagtail_hooks.py
文件。在这里你可以定义通过admin创建或编辑页面后调用的函数,例如:
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/')