Spec-Zone.ru › Wagtail

Типы панелей

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

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

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

FieldPanel

StreamFieldPanel

MultiFieldPanel

InlinePanel

Это мощная, но сложная функция, на описание которой потребуется много места, поэтому мы её пропустим пока. Для полного объяснения использования InlinePanel, см. Вложенные панели и кластеры моделей.

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

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

FieldRowPanel

HelpPanel

PageChooserPanel

ImageChooserPanel

FormSubmissionsPanel

DocumentChooserPanel

SnippetChooserPanel

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

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

Заголовки

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

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

Изменено в версии 4.0: Все панели теперь по умолчанию сворачиваются.

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

    content_panels = [
        MultiFieldPanel(
            [
                FieldPanel('cover'),
                FieldPanel('book_file'),
                FieldPanel('publisher'),
            ],
            heading="Collection of Book Fields",
            classname="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.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', heading="Related Links", label="Related link"),
    ]

Класс 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/stable/reference/pages/panels.html

Spec-Zone.ru

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