Я и моя команда создали раздел, чтобы наша компания могла добавлять целевые страницы. Мы хотели бы включить некоторые дополнительные столбцы в представление индекса связанной модели, как показано на этом изображении.
Я нашел несколько старых сообщений (2014 г.), которые указывают на то, что это было невозможно, но я не могу найти ничего более нового, что делало бы это утверждение недействительным. Возможно ли это сделать, и если да, то может ли кто-нибудь указать мне правильное направление?
Вы можете сделать это с помощью МодельАдминистратор для конкретной модели, но она не будет отображаться в представлении Проводника страниц, как показано на снимке экрана. Вместо этого он появится в новом пункте меню на левой боковой панели. Я также считаю, что Хуки — отличное место для хранения этой логики. Просто помните, чем МодельАдминистратор отличается от модельadmin. В Пекарня Демо есть несколько хороших примеров того, как все это работает.
Если вы хотите исправить представление и шаблон для обозревателя страниц, вы сможете это сделать. Моя группа не исправляет обозреватель страниц, поэтому у меня нет примера кода для этого, но наш общий подход таков:
В wagtail_patches/apps.py у нас есть:
from django.apps import AppConfig
class WagtailPatchesConfig(AppConfig):
name = 'wagtail_patches'
verbose_name = 'Wagtail Patches'
ready_is_done = False
def ready(self):
"""
This function runs as soon as the app is loaded. It executes our monkey patches to various parts of Wagtail
that change it to support our architecture of fully separated tenants.
"""
# As suggested by the Django docs, we need to make absolutely certain that this code runs only once.
if not self.ready_is_done:
# The act of performing this import executes all the code in monkey_patches.
from . import monkey_patches
# Unlike monkey_patches, the code of wagtail_hook_patches is in the function patch_hooks().
from .wagtail_hook_patches import patch_hooks
patch_hooks()
self.ready_is_done = True
else:
print("{}.ready() executed more than once! This method's code is skipped on subsequent runs.".format(
self.__class__.__name__
))
Затем в wagtail_patches/monkey_patches.py мы импортируем модуль для исправления, затем пишем новый метод, а затем заменяем стандартную версию новым методом. Например:
from wagtail.admin.forms.collections import CollectionForm
def collection_form_clean_name(self):
if <weird custom condition>:
raise ValidationError('some error message')
CollectionForm.clean_name = collection_form_clean_name
Интересный подход. Престон упомянул подход ModelAdmin, и мы заработали, но это не совсем то, на что мы надеялись. Тем не менее, подход с патчем для обезьян — умная идея, и я не против. Спасибо за предложение!
У нас есть некоторые модели, которыми мы управляем как модели с помощью ModelAdmin, но для большинства вещей мы хотим иметь данные на страницах, потому что это автоматически дает вам историю публикации/отмены публикации и изменений - в дополнение к способам отображения в виде веб-страницы.
Престон, это хорошая информация. На самом деле у меня есть рабочая реализация с использованием ModelAdmin. Мне нравится, что он отображается в левой навигационной панели, но отображение списка не такое насыщенное, как в стандартном списке. Спасибо!