Spec-Zone.ru › Wagtail 2

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)
  • Предыдущая RoutablePageMixin
  • Следующая modeladmin руководство по настройке

Содержание страницы

  • ModelAdmin
    • Краткое описание функций
    • Хотите узнать больше о настройке ModelAdmin?
      • Установка
      • Как использовать
        • Простой пример
        • Более сложный пример
        • Регистрация нескольких классов в одном файле wagtail_hooks.py

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API