Есть ли простой способ добавить кнопку копирования в IndexListing нестраничной модели в трясогузке? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть модель Snippet, которую я использую ModelAdmin для создания, редактирования и создания списка в Wagtail.Я хотел бы создать функцию копирования, и я вижу, что трясогузка поддерживает это из коробки для Page объектов:

enter image description here

ДоЯ пишу собственный код, чтобы сделать это, я подумал, что спросить, есть ли способ легко сделать это в Wagtail.Я не нашел никаких хуков, которые могли бы даже легко добавить больше кнопок, и, хотя я нашел modeladmin-list-display-add-buttons , мне кажется, что это позволяет мне только изменить расположение по умолчанию.Кнопки редактирования и удаления.

1 Ответ

0 голосов
/ 29 ноября 2018

Этого можно добиться.Тем не менее, это потребует пользовательского кода, а также различных переопределений и дополнений в разных местах.Вот несколько шагов, которые должны помочь вам на вашем пути, с некоторыми ссылками на пример кода в расширении wagtailmenus, который делает именно эту вещь:

Добавление пользовательского представления:

  1. Создайте пользовательский CopyView вид (подкласс wagtail.contrib.modeladmin.views.EditView, вероятно, будет вашей лучшей отправной точкой).Для вдохновения вы можете взглянуть на тот, который я создал для wagtailmenus: https://github.com/rkhleics/wagtailmenus/blob/master/wagtailmenus/views.py#L141
  2. Интегрируйте представление с вашим классом ModelAdmin, добавив метод copy_view(), который создает ваш пользовательский вид.Например: https://github.com/rkhleics/wagtailmenus/blob/master/wagtailmenus/modeladmin.py#L78
  3. Переопределите метод get_admin_urls_for_registration() вашего ModelAdmin класса, чтобы сделать представление доступным через URL.Например: https://github.com/rkhleics/wagtailmenus/blob/master/wagtailmenus/modeladmin.py#L82

Получение кнопки для отображения в листинге:

  1. Создание собственного класса ButtonHelper путем создания подкласса wagtail.contrib.modeladmin.helpers.ButtonHelper.
  2. Добавьте метод copy_button(), который может предоставить все необходимые детали для создания кнопки.Например: https://github.com/rkhleics/wagtailmenus/blob/master/wagtailmenus/modeladmin.py#L38/
  3. Переопределите метод get_buttons_for_obj(), чтобы вывести кнопку копирования в список вместе с другими, в зависимости от прав пользователя (например, https://github.com/rkhleics/wagtailmenus/blob/master/wagtailmenus/modeladmin.py#L49)
  4. Наконец, получитеваш ModelAdmin класс будет использовать ваш собственный ButtonHelper вместо стандартного, изменив атрибут button_helper_class для ссылки на ваш пользовательский класс.

Если выХотелось бы больше узнать обо всех различных классах в wagtail.contrib.modeladmin, я бы посоветовал прочитать страницу настройки учебника *1047* для modeladmin из официальной документации Wagtail.

...