Добавить содержимое поля к полю заголовка в Wagtail-CMS-admin

Чтобы различать страницы в админке Wagtail CMS (в представлении списка страниц, а не в представлении страницы редактирования), title в моем случае недостаточно. У меня есть длинный список страниц одного типа (скажем, class BlogPage), и некоторые из этих страниц могут иметь одинаковые title. Поэтому я хотел бы добавить второе поле идентификации (здесь: date_from, DateField) к этому заголовку.

я думал о

class BlogPage(Page):
    ...
    def title(self):
    if self.date_from:
        return self.date_from + " - " + self.title
    else:
        return self.title

но это не работает, page.title без моего def используется для соответствующего Шаблон администратора-трясогузки.

Краткая версия: Как предварительно/дополнить существующее поле к заголовку в Wagtail-admin?


person tombreit    schedule 02.08.2015    source источник


Ответы (3)


Если вы хотите заменить заголовок во всей панели администратора модели (да, это включает страницу редактирования), у трясогузки есть встроенный механизм для этого.

def get_admin_display_title(self):
    return '{} - {}'.format(self.date_from, super().get_admin_display_title())
person Jordan Caras    schedule 25.04.2017

title — это фактический атрибут модели Django, не пытайтесь его переопределить: https://docs.djangoproject.com/en/dev/topics/db/models/#field-name-hiding-is-неразрешено

Фактический шаблон администратора из wagtailadmin/pages/list.html генерирует список страниц в цикле, используя {% for page in pages %}, и повсеместно вызывает {{ page.title}} через include (templates/wagtailadmin/pages/listing/_page_title_explore.html). Таким образом, основываясь на проверке кода, в самой трясогузке нет поддержки. Проверьте, что другие включают templates/wagtailadmin/pages/listing/*.

Однако Django поддерживает замену шаблонов одного приложения вашими собственными. Вы можете скопировать этот шаблон в папку шаблонов вашего проекта, сохранив тот же путь (например, templates/wagtailadmin/pages/listing/_page_title_explore.html при условии, что ваш проект настроен с каталогом шаблонов).

Вам придется заменить вызовы page.title своей собственной версией. Фильтр или тег могут упростить эту задачу. Добавьте следующий фильтр в теги шаблона (например, myapp/templatetetags/myapp_tags.py):

register = template.Library()

@register.filter
def uniquify_title(page):
    specific_page = page.specific
    try:
        return specific_page.date_from.strftime("%Y-%m-%d") + " - " + specific_page.title
    except AttributeError:
        return specific_page.title

А затем замените использование {{ page.title}} в шаблоне, начиная со строк 7 и 9, на:

{{ page|uniquify_title }}

Недостатком этого является то, что вы должны обновлять свою собственную версию list.html каждый раз, когда обновляется трясогузка. Вы можете попробовать отправить вопрос на Github и предложить форк, который предоставляет вызываемый «admin_title» или что-то в этом роде.

person Brett    schedule 02.08.2015
comment
Чтобы не срабатывать по каждому шаблону, это можно сузить до определенного шаблона: @register.filter def uniquify_title(page): specific_page = page.specific if specific_page.template == 'foo/bar_page.html': try: return specific_page.datum.strftime("%Y-%m-%d") + " – " + specific_page.title except AttributeError: return specific_page.title else: return specific_page.title - person tombreit; 04.08.2015
comment
Я не понимаю, почему трясогузка просто не использует __str__(self) для отображения имени страницы в админке. - person Dominique PERETTI; 15.06.2016

wagtailmodeladmin, кажется, делает именно то, что я искал: расширение wagtailadmin для отображения определенный набор полей - не только title - на основе модели страницы; как бы я хотел, чтобы это было на сайте администратора Django.

Таким образом, я не изменяю список страниц администратора трясогузки по умолчанию - как я пытался это сделать в своем вопросе, но hook в дополнительном списке страниц в качестве дополнительной навигационной записи на боковой панели трясогузки.

Благодаря другому ответу я наткнулся на эту возможность.

person tombreit    schedule 05.08.2015