ModelAdmin
Модуль modeladmin позволяет добавить в админскую панель Wagtail любую модель вашего проекта. Вы можете создавать настраиваемые страницы списка для модели, включая обычные модели Django, и добавлять элементы навигации, чтобы модель можно было получить прямой доступ из админской панели Wagtail. Просто расширьте класс ModelAdmin, переопределите несколько атрибутов в соответствии со своими потребностями, зарегистрируйте его в Wagtail с помощью простого однострочного метода modeladmin_register (можно скопировать и вставить примеры ниже), и всё готово. Вашей модели не нужно расширять Page или регистрироваться как Snippet, и она не повлияет на существующую функциональность админской панели, предоставляемую Wagtail.
Обзор возможностей
- Настраиваемый вид списка, позволяющий управлять отображаемыми значениями для каждой строки, доступными вариантами фильтрации результатов, сортировкой по умолчанию, скачиванием в формате электронных таблиц и многим другим.
- Легко получайте доступ к вашим спискам через меню админской панели Wagtail с помощью автоматически сгенерированных пунктов меню с автоматическим выделением активного элемента. Управляйте текстом метки и используемыми значками с помощью легко изменяемых атрибутов вашего класса.
- Дополнительный класс
ModelAdminGroup, который позволяет группировать связанные модели и выводить их вместе в своём подменю для более логичного пользовательского опыта. - Простые и надёжные представления добавления и редактирования для ваших моделей, не являющихся страницами, которые используют конфигурации панелей, определённые в вашей модели с помощью редактируемых панелей Wagtail.
- Для моделей страниц система перенаправляет вас на существующие представления добавления и редактирования Wagtail и возвращает вас на правильную страницу списка для бесшовного опыта.
- Полное соблюдение прав, назначенных вашим пользователям и группам Wagtail. Пользователи смогут делать только то, что вы хотите!
- Всё, что нужно для лёгкой интеграции ваших классов
ModelAdminв Wagtail, занимаясь регистрацией URL-адресов, изменениями меню и регистрацией любых отсутствующих разрешений модели, чтобы вы могли назначить их группам. -
Разработан для настройки - Хотя
modeladminпредоставляет надёжный опыт из коробки, вы можете легко использовать свои собственные шаблоны, и классModelAdminимеет большое количество методов, которые вы можете переопределить или расширить, что позволяет настроить поведение в большей степени.
Хотите узнать больше о настройке ModelAdmin?
modeladminруководство по настройке- Настройка базового пути URL
- Настройка пункта меню
- Настройка
IndexView— представления списка - Настройка
CreateView,EditViewиDeleteView - Изменение отображаемых полей в
CreateViewиEditView - Включение и настройка
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
base_url_path = 'bookadmin' # customise the URL from default to admin/bookadmin
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
add_to_admin_menu = True # or False to exclude your model from the menu
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/stable/reference/contrib/modeladmin/index.html