Spec-Zone.ru › Wagtail

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

Spec-Zone.ru

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