ModelAdmin
Модуль modeladmin позволяет добавить любую модель из вашего проекта в административную панель Wagtail. Вы можете создавать настраиваемые страницы списка для модели, включая обычные модели Django, и добавлять элементы навигации, чтобы модель можно было получить прямой доступ из административной панели Wagtail. Просто расширьте класс ModelAdmin, переопределите несколько атрибутов в соответствии с вашими потребностями, зарегистрируйте его в Wagtail с помощью простого однострочного метода modeladmin_register (вы можете скопировать и вставить из примеров ниже), и всё готово. Вашей модели не нужно расширять Page или быть зарегистрированной как Snippet, и она не будет мешать никаким существующим функциям администрирования, предоставляемым Wagtail.
Краткое описание функций
- Настраиваемый вид списка, позволяющий контролировать, какие значения отображаются для каждой строки, доступные варианты фильтрации результатов, сортировка по умолчанию, скачивание в виде таблицы и многое другое.
- Легкий доступ к вашим спискам из меню административной панели Wagtail с помощью автоматически генерируемых пунктов меню и автоматическим выделением активного элемента. Контролируйте текст метки и значки, используемые с легко изменяемыми атрибутами вашего класса.
- Дополнительный класс
ModelAdminGroup, который позволяет группировать связанные модели и отображать их вместе в собственном подменю для более логичного пользовательского опыта. - Простые и надёжные представления добавления и редактирования для ваших моделей, не являющихся страницами, которые используют конфигурации панелей, определённые в вашей модели с помощью редактируемых панелей Wagtail.
- Для моделей страниц система перенаправляет вас на существующие представления добавления и редактирования Wagtail и возвращает вас на правильную страницу списка для бесшовного опыта.
- Полное соблюдение разрешений, назначенных вашим пользователям и группам Wagtail. Пользователи смогут выполнять только то, что вы хотите!
- Всё, что вам нужно, чтобы легко подключить ваши классы
ModelAdminк Wagtail, позаботившись о регистрации URL-адресов, изменениях меню и регистрации любых недостающих разрешений модели, чтобы вы могли назначить их группам. -
Создано для настройки - Хотя
modeladminпредоставляет надёжный опыт «из коробки», вы можете легко использовать свои собственные шаблоны, и классModelAdminимеет большое количество методов, которые вы можете переопределять или расширять, что позволяет настроить поведение в большей степени.
Хотите узнать больше о настройке ModelAdmin?
modeladminруководство по настройке- Настройка пункта меню
- Настройка
IndexView— представления списка - Настройка
CreateView,EditViewиDeleteView - Включение и настройка
InspectView - Настройка
ChooseParentView - Дополнительные советы и рекомендации
Установка
Добавьте wagtail.contrib.modeladmin в ваш INSTALLED_APPS.
INSTALLED_APPS = [ ... 'wagtail.contrib.modeladmin', ]
Как использовать
Простой пример
Предположим, ваш сайт предназначен для местной библиотеки. У них есть модель под названием Book, которая появляется на сайте во многих местах. Вы можете определить обычную модель Django для неё, а затем использовать ModelAdmin для создания меню в административной панели Wagtail для создания, просмотра и редактирования записей Book.
models.py выглядит так:
from django.db import models
from wagtail.admin.edit_handlers import FieldPanel
from wagtail.images.edit_handlers import ImageChooserPanel
class Book(models.Model):
title = models.CharField(max_length=255)
author = models.CharField(max_length=255)
cover_photo = models.ForeignKey(
'wagtailimages.Image',
null=True, blank=True,
on_delete=models.SET_NULL,
related_name='+'
)
panels = [
FieldPanel('title'),
FieldPanel('author'),
ImageChooserPanel('cover_photo')
]
Подсказка
Вы можете указать FieldPanels как ImageChooserPanel, PageChooserPanel, и DocumentChooserPanel в атрибуте panels модели. Это позволит вам использовать функции Wagtail в обычной модели Django.
wagtail_hooks.py в вашем каталоге приложения будет выглядеть примерно так:
from wagtail.contrib.modeladmin.options import (
ModelAdmin, modeladmin_register)
from .models import Book
class BookAdmin(ModelAdmin):
model = Book
menu_label = 'Book' # ditch this to use verbose_name_plural from model
menu_icon = 'pilcrow' # change as required
menu_order = 200 # will put in 3rd place (000 being 1st, 100 2nd)
add_to_settings_menu = False # or True to add your model to the Settings sub-menu
exclude_from_explorer = False # or True to exclude pages of this type from Wagtail's explorer view
list_display = ('title', 'author')
list_filter = ('author',)
search_fields = ('title', 'author')
# Now you just need to register your customised ModelAdmin class with Wagtail
modeladmin_register(BookAdmin)
Более сложный пример
В дополнение к Book, возможно, мы также хотим добавить модели Author и Genre в наше приложение и отобразить пункт меню для каждой из них. Быстрое создание большого количества меню может привести к накоплению. Поэтому может быть хорошей идеей сгруппировать связанные меню вместе. Этот раздел покажет вам, как создать одно меню под названием «Библиотека», которое будет раскрываться, чтобы показать подменю «Книга», «Автор» и «Жанр».
Предположим, что мы определили модели Book, Author и Genre в models.py.
wagtail_hooks.py в вашем каталоге приложения будет выглядеть примерно так:
from wagtail.contrib.modeladmin.options import (
ModelAdmin, ModelAdminGroup, modeladmin_register)
from .models import (
Book, Author, Genre)
class BookAdmin(ModelAdmin):
model = Book
menu_label = 'Book' # ditch this to use verbose_name_plural from model
menu_icon = 'pilcrow' # change as required
list_display = ('title', 'author')
list_filter = ('genre', 'author')
search_fields = ('title', 'author')
class AuthorAdmin(ModelAdmin):
model = Author
menu_label = 'Author' # ditch this to use verbose_name_plural from model
menu_icon = 'user' # change as required
list_display = ('first_name', 'last_name')
list_filter = ('first_name', 'last_name')
search_fields = ('first_name', 'last_name')
class GenreAdmin(ModelAdmin):
model = Genre
menu_label = 'Genre' # ditch this to use verbose_name_plural from model
menu_icon = 'group' # change as required
list_display = ('name',)
list_filter = ('name',)
search_fields = ('name',)
class LibraryGroup(ModelAdminGroup):
menu_label = 'Library'
menu_icon = 'folder-open-inverse' # change as required
menu_order = 200 # will put in 3rd place (000 being 1st, 100 2nd)
items = (BookAdmin, AuthorAdmin, GenreAdmin)
# When using a ModelAdminGroup class to group several ModelAdmin classes together,
# you only need to register the ModelAdminGroup class with Wagtail:
modeladmin_register(LibraryGroup)
Регистрация нескольких классов в одном файле wagtail_hooks.py
Каждый раз, когда вы вызываете modeladmin_register(MyAdmin), создаётся новый пункт меню верхнего уровня в левой боковой панели Wagtail. Вы можете вызвать это несколько раз в одном и том же файле wagtail_hooks.py, если хотите. Приведенный ниже пример создаст 3 пункта меню верхнего уровня.
class BookAdmin(ModelAdmin):
model = Book
...
class MovieAdmin(ModelAdmin):
model = MovieModel
...
class MusicAdminGroup(ModelAdminGroup):
menu_label = _("Music")
items = (AlbumAdmin, ArtistAdmin)
...
modeladmin_register(BookAdmin)
modeladmin_register(MovieAdmin)
modeladmin_register(MusicAdminGroup)
© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/v2.16.3/reference/contrib/modeladmin/index.html