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.panels import FieldPanel
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'),
FieldPanel('cover_photo')
]
Подсказка
Вы можете указать панели, например, MultiFieldPanel, в атрибуте 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/v3.0.3/reference/contrib/modeladmin/index.html