Трясогузка: изменить list_display для трясогузки

Я использую библиотеку wagtailmenus с некоторыми пользовательскими моделями, как описано здесь. Ничего особенного, просто добавляет языковое поле:

class TranslatableFlatMenu(AbstractFlatMenu):
    language = models.CharField(choices=TRANSLATION_CHOICES, help_text='For what language the menu should be used', max_length=13)

    content_panels = (
        MultiFieldPanel(
            heading=_("Menu Details"),
            children=(
                FieldPanel("title"),
                FieldPanel("site"),
                FieldPanel("handle"),
                FieldPanel("heading"),
                FieldPanel("language"),
            )
        ),
        FlatMenuItemsInlinePanel(),
    )


class TranslatableFlatMenuItem(AbstractFlatMenuItem):
    menu = ParentalKey(
        TranslatableFlatMenu,
        on_delete=models.CASCADE,
        related_name=settings.FLAT_MENU_ITEMS_RELATED_NAME,
    )

Это отлично работает, однако я хотел бы отобразить здесь поле:

Теперь для обычных моделей я могу использовать ModelAdmin и передать list_display, но кажется, что трясогузки уже сами регистрируют меню. Можно ли еще поменятьlist_display свойство каким-то образом, чтобы я мог отображать язык в списке?

1 ответ

Решение

Я не очень разбираюсь в трясогузках, но он думает, что WAGTAILMENUS_FLAT_MENUS_MODELADMIN_CLASS - это настройка, которую вы ищете.

Чтобы изменить поля в list_display, вам придется создать подклассы трясогузки; FlatMenuAdmin и отменить его get_list_display функция:

class TranslatableFlatMenuAdmin(FlatMenuAdmin):
    def get_list_display(self, request):
        if self.is_multisite_listing(request):
            return ('title', 'language', 'handle_formatted', 'site', 'items')
        return ('title', 'language', 'handle_formatted', 'items')

затем в вашем settings.py добавьте что-то вроде:

WAGTAILMENUS_FLAT_MENUS_MODELADMIN_CLASS = "project.app.admin.TranslatableFlatMenuAdmin"
Другие вопросы по тегам