Spec-Zone.ru › Wagtail 3

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

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

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

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

Примеры см. ниже:

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

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

В этом примере мы покажем быстрый способ получить 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 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() для генерации URL конкретного объекта, необходимо предоставить значение первичного ключа целевого объекта, чтобы оно могло быть включено в результирующий URL (например, "/admin/my-app/author/edit/2/"). Следующие имена действий для конкретных объектов поддерживаются get_action_url():

Примечание

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

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

Получение index или create URL для модели

Доступны URL для представления списка модели (действие '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), и страницы этого типа могут быть добавлены более чем в одно место в дереве страниц, при посещении пользователем URL create он будет автоматически перенаправлен на другой вид для выбора родительской страницы. Поэтому вам не нужно проверять или учитывать это в собственном коде.

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

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

Spec-Zone.ru

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