Spec-Zone.ru › Wagtail 2

Типы панелей

Встроенные поля и выбиратели

Типы полей Django автоматически распознаются и снабжаются соответствующим виджетом для ввода. Просто определите это поле обычным способом Django и передайте имя поля в FieldPanel при определении ваших панелей. Wagtail позаботится о остальном.

Вот некоторые специфичные для Wagtail типы, которые вы можете включить в качестве полей в ваших моделях.

FieldPanel

StreamFieldPanel

MultiFieldPanel

InlinePanel

Сворачивание InlinePanel для экономии места

Обратите внимание, что вы можете использовать classname="collapsible collapsed" для загрузки панели свернутой под её заголовком, чтобы сэкономить место в админке Wagtail. Подробнее о использовании collapsible см. Сворачиваемые.

FieldRowPanel

HelpPanel

PageChooserPanel

ImageChooserPanel

FormSubmissionsPanel

DocumentChooserPanel

SnippetChooserPanel

Настройка полей

Добавляя CSS-классы к определениям ваших панелей или добавляя дополнительные параметры к определениям полей, вы можете контролировать то, как ваши поля будут отображаться в интерфейсе редактирования страниц Wagtail. Интерфейс редактирования страниц Wagtail частично использует поведение из админки Django, поэтому вы можете найти много вариантов настройки там. (См. Справочник по полям моделей Django).

Полная ширина ввода

Используйте classname="full" чтобы сделать поле (элемент ввода) занимало всю ширину редактора страниц Wagtail. Это не будет работать, если поле заключено в MultiFieldPanel, который помещает дочерние поля в форму.

Заголовки

Используйте classname="title" чтобы выделить встроенное поле заголовка страницы с большим вертикальным отступом.

Сворачиваемые

По умолчанию панели развернуты и не сворачиваются. Используйте classname="collapsible" для включения управления сворачиванием. Используйте classname="collapsible collapsed" для загрузки страницы редактора со свернутой панелью под заголовком.

Вы должны определить heading при использовании collapsible с MultiFieldPanel. Вы должны определить heading или label при использовании collapsible с InlinePanel.

content_panels = [
    MultiFieldPanel(
        [
            ImageChooserPanel('cover'),
            DocumentChooserPanel('book_file'),
            PageChooserPanel('publisher'),
        ],
        heading="Collection of Book Fields",
        classname="collapsible collapsed"
    ),
]

Текст-заполнитель

По умолчанию Wagtail использует метку поля в качестве текста-заполнителя. Чтобы изменить его, передайте в FieldPanel виджет с атрибутом placeholder, установленным на желаемый текст. Вы можете выбрать виджеты из виджетов форм Django, или любой из виджетов Wagtail, найденных в wagtail.admin.widgets.

Например, чтобы настроить заполнители для модели Book, показанной через ModelAdmin:

# models.py
from django import forms            # the default Django widgets live here
from wagtail.admin import widgets   # to use Wagtail's special datetime widget

class Book(models.Model):
    title = models.CharField(max_length=256)
    release_date = models.DateField()
    price = models.DecimalField(max_digits=5, decimal_places=2)

    # you can create them separately
    title_widget = forms.TextInput(
        attrs = {
            'placeholder': 'Enter Full Title'
        }
    )
    # using the correct widget for your field type and desired effect
    date_widget = widgets.AdminDateInput(
        attrs = {
            'placeholder': 'dd-mm-yyyy'
        }
    )

    panels = [
        FieldPanel('title', widget=title_widget), # then add them as a variable
        FieldPanel('release_date', widget=date_widget),
        FieldPanel('price', widget=forms.NumberInput(attrs={'placeholder': 'Retail price on release'})) # or directly inline
    ]

Обязательные поля

Чтобы сделать обязательным ввод или выбор в поле, добавьте blank=False в определение модели.

Скрытие полей

Без определения панели будет использоваться стандартное поле формы (без метки) для представления ваших полей. Если вы хотите скрыть поле в редакторе страницы Wagtail, определите поле с editable=False.

Вложенные панели и кластеры моделей

Модуль django-modelcluster позволяет упростить связь дополнительных моделей со страницей Wagtail с помощью отношения, похожего на ForeignKey, называемого ParentalKey. Обычно ваши связанные объекты «кластера» должны быть созданы предварительно (или асинхронно) перед связыванием со страницей; однако объекты, связанные со страницей Wagtail через ParentalKey, могут быть созданы на лету и сохранены в черновиковой версии объекта Page.

Давайте рассмотрим пример добавления связанных ссылок к модели, производной от Page. Мы хотим иметь возможность добавлять их в любое количество, назначать порядок и делать всё это, не покидая экран редактирования страницы.

from wagtail.core.models import Orderable, Page
from modelcluster.fields import ParentalKey

# The abstract model for related links, complete with panels
class RelatedLink(models.Model):
    title = models.CharField(max_length=255)
    link_external = models.URLField("External link", blank=True)

    panels = [
        FieldPanel('title'),
        FieldPanel('link_external'),
    ]

    class Meta:
        abstract = True

# The real model which combines the abstract model, an
# Orderable helper class, and what amounts to a ForeignKey link
# to the model we want to add related links to (BookPage)
class BookPageRelatedLinks(Orderable, RelatedLink):
    page = ParentalKey('demo.BookPage', on_delete=models.CASCADE, related_name='related_links')

class BookPage(Page):
  # ...

  content_panels = Page.content_panels + [
    InlinePanel('related_links', label="Related Links"),
  ]

Класс RelatedLink — обычная абстрактная модель Django. Модель BookPageRelatedLinks расширяет её, добавляя возможность упорядочения в интерфейсе Wagtail с помощью класса Orderable, а также добавляя свойство page, которое связывает модель с моделью BookPage, к которой добавляются связанные ссылки.

Наконец, в определениях панелей для BookPage, мы добавим InlinePanel для предоставления интерфейса для всего этого. Посмотрим ещё раз на параметры, которые принимает InlinePanel:

InlinePanel( relation_name, panels=None, heading='', label='', help_text='', min_num=None, max_num=None )

relation_name — это метка related_name отношения кластера ParentalKey. Вы можете добавить panels вручную или сделать их частью модели кластера. heading и help_text обеспечивают заголовок и подзаголовок соответственно для редактора Wagtail. label задаёт текст на кнопке "Добавить" и используется в качестве заголовка, когда heading отсутствует. Наконец, min_num и max_num позволяют задать минимальное/максимальное количество форм, которые пользователь должен отправить.

Ещё один пример использования кластеров моделей см. в Тегирование

Дополнительную информацию о django-modelcluster, посетите страницу проекта django-modelcluster на github.

  • Предыдущая Рецепты
  • Следующая Справочник по моделям

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

  • Типы панелей
    • Встроенные поля и выбиратели
      • FieldPanel
      • StreamFieldPanel
      • MultiFieldPanel
      • InlinePanel
      • FieldRowPanel
      • HelpPanel
      • PageChooserPanel
      • ImageChooserPanel
      • FormSubmissionsPanel
      • DocumentChooserPanel
      • SnippetChooserPanel
    • Настройка полей
      • Полная ширина ввода
      • Заголовки
      • Сворачиваемые
      • Текст-заполнитель
      • Обязательные поля
      • Скрытие полей
    • Вложенные панели и кластеры моделей

© 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/pages/panels.html

Spec-Zone.ru

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