Spec-Zone.ru › Wagtail 2

Обращение адресов ModelAdmin

Иногда полезно иметь возможность получить index (список) или create адреса для модели вместе с edit, delete или inspect адресом для конкретного объекта в модели, которую вы зарегистрировали с помощью приложения modeladmin.

Сам Wagtail делает это, создавая каждый экземпляр класса ModelAdmin, который вы зарегистрировали, и используя атрибут url_helper каждого экземпляра, чтобы определить эти адреса.

Вы можете использовать похожий подход в собственном коде, создавая экземпляр ModelAdmin самостоятельно и используя его атрибут url_helper, чтобы определить адреса.

Ниже приведены некоторые примеры:

  • Получение edit или delete или inspect адреса для объекта
  • Получение index или create адреса для модели

Получение edit или delete или inspect адреса для объекта

В этом примере мы предоставим быстрый способ получить edit автора, связанного с записью блога из меню списка страниц административной панели. Мы определили класс AuthorModelAdmin и зарегистрировали его в Wagtail, чтобы разрешить Author объектам администрироваться через административную область. Модель BlogPage имеет поле author (ссылка на модель Author) для указания одного автора на каждую запись.

# file: wagtail_hooks.py

from wagtail.admin.widgets import PageListingButton
from wagtail.contrib.modeladmin.options import ModelAdmin, modeladmin_register
from wagtail.core import hooks

# Author & BlogPage model not shown in this example
from models import Author

# ensure our modeladmin is created
class AuthorModelAdmin(ModelAdmin):
    model = Author
    menu_order = 200

# Creating an instance of `AuthorModelAdmin`
author_modeladmin = AuthorModelAdmin()

@hooks.register('register_page_listing_buttons')
def add_author_edit_buttons(page, page_perms, is_parent=False, next_url=None):
    """
    For pages that have an author, add an additional button to the page listing,
    linking to the 'edit' page for that author.
    """
    author_id = getattr(page, 'author_id', None)
    if author_id:
        # the url helper will return something like: /admin/my-app/author/edit/2/
        author_edit_url = author_modeladmin.url_helper.get_action_url('edit', author_id)
        yield PageListingButton('Edit Author',  author_edit_url, priority=10)

modeladmin_register(AuthorModelAdmin)

Как видно из примера выше, при использовании get_action_url() для генерации адресов конкретных объектов, необходимо предоставить значение первичного ключа целевого объекта, чтобы оно могло быть включено в результирующий адрес (например, "/admin/my-app/author/edit/2/"). Следующие имена действий для конкретных объектов поддерживаются get_action_url():

Примечание

Если вы используете строковые значения в качестве первичных ключей для вашей модели, вам может потребоваться обработать случаи, когда ключ содержит символы, которые не являются безопасными для URL. Безопасны только буквенно-цифровые символы ([0-9a-zA-Z]) или следующие специальные символы: $, -, _, ., +, !, *, ', (, ).

django.contrib.admin.utils.quote() может быть использован для безопасного кодирования этих значений первичных ключей перед передачей их в get_action_url(). Если этого не сделать, Wagtail может не распознать первичный ключ при посещении адреса, что приведет к ошибкам 404.

Получение index или create адреса для модели

Доступны адреса для представления списка моделей (действие 'index') и представления создания модели (действие 'create'). Для каждого из них доступен соответствующий сокращенный вариант; url_helper.index_url и url_helper.create_url.

Например:

from .wagtail_hooks import AuthorModelAdmin

url_helper = AuthorModelAdmin().url_helper

index_url = url_helper.get_action_url('index')
# OR we can use the 'index_url' shortcut
also_index_url = url_helper.index_url # note: do not call this property as a function
# both will output /admin/my-app/author

create_url = url_helper.get_action_url('create')
# OR we can use the 'create_url' shortcut
also_create_url = url_helper.create_url # note: do not call this property as a function
# both will output /admin/my-app/author/create

Примечание

Если вы зарегистрировали тип страницы с помощью modeladmin (например, BlogPage), и страницы этого типа могут быть добавлены более чем в одном месте в дереве страниц, при посещении пользователем адреса create, он автоматически будет перенаправлен на другое представление, чтобы выбрать родительскую страницу для новой страницы. Поэтому вам не нужно проверять или учитывать это в собственном коде.

Чтобы настроить поведение url_helper , см. ModelAdmin.url_helper_class.

  • Предыдущая Дополнительные советы и хитрости
  • Следующая Поисковый движок PostgreSQL

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

  • Обращение адресов ModelAdmin
    • Получение edit или delete или inspect адреса для объекта
    • Получение index или create адреса для модели

© 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/tips_and_tricks/reversing_urls.html

Spec-Zone.ru

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