0

我正在使用带有一些自定义模型的 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 和 pass list_display,但 wagtailmenus 似乎已经注册了菜单本身。是否仍然可以以list_display某种方式更改属性,以便我可以在列表中显示语言?

4

1 回答 1

1

我对 wagtailmenus 并不精通,但它认为WAGTAILMENUS_FLAT_MENUS_MODELADMIN_CLASS是您正在寻找的设置。

要更改 中的字段list_display,您必须将 wagtailmenus 子类化;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"
于 2020-07-09T08:15:06.730 回答