Spec-Zone.ru › Wagtail 3

Типы панелей

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

Типы полей 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(
        [
            FieldPanel('cover'),
            FieldPanel('book_file'),
            FieldPanel('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. Обычно связанные объекты «кластера» должны создаваться заранее (или асинхронно) перед связыванием с Page; однако объекты, связанные со страницей Wagtail через ParentalKey, могут создаваться на лету и сохраняться в черновой ревизии объекта Page.

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

from wagtail.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 .

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

Spec-Zone.ru

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