Wagtail Admin: как контролировать, куда перенаправляется пользователь после отправки изменений на модерацию
На сайте Wagtail, который я создал, у меня есть тип модели, который можно редактировать аутентифицированными пользователями, у которых нет полных прав администратора. Их можно сохранить только как черновик или отправить изменения на модерацию. Проблема, с которой я столкнулся, заключается в том, что трясогузка непоследовательна в том, куда она перенаправляется после выполнения этих двух действий. Сохранение черновика возвращает пользователя к экрану редактирования, на котором он только что был, с пометкой о том, что черновик был сохранен (хорошо). Отправка на модерацию возвращает пользователя к просмотру родительской страницы в режиме просмотра администратора, на котором отображаются все родственные узлы в списке. Они не могут редактировать подавляющее большинство элементов в этом списке, поэтому я думаю, что это сбивает с толку пользователя, не являющегося администратором. Я хотел бы, чтобы действие "Отправить на модерацию" определяло, принадлежит ли пользователь к группе, отличной от 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/')
Вероятно, есть какое-то действие администратора Wagtail, которое мне нужно зацепить и переопределить, вместо того, чтобы пытаться выполнить это в models.py, но у меня нет большого опыта в этом, поэтому мне нужно лучше понимать, что изменить и где.
1 ответ
Создать after_create_page
а также after_edit_page
крючок: https://docs.wagtail.io/en/stable/reference/hooks.html
Для этого добавьте 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/')