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/')
Другие вопросы по тегам