Фильтр доступных блоков для StreamField в интерфейсе редактора Wagtail

У меня есть следующие подклассы StructBlock и подкласс Page


class TestimonialBlock(blocks.StructBlock):
    class Review(blocks.StructBlock):
        text = blocks.TextBlock(label=_("Text"))
        author = blocks.TextBlock(label=_("Author"))
        link = blocks.URLBlock(required=False, label=_("Author link"))

    class Meta:
        icon = "openquote"
        label = _("Testimonial")

    title = blocks.TextBlock(required=False, label=_("Title"))
    review_list = blocks.ListBlock(Review(), label=_("Review(s)"))


class TeamBlock(blocks.StructBlock):
    class Member(blocks.StructBlock):
        name = blocks.TextBlock(label=_("Name"))
        role = blocks.TextBlock(label=_("Role"))
        photo = ImageChooserBlock(label=_("Photo"))
        link = blocks.URLBlock(required=False, label=_("Profile link"))

    class Meta:
        icon = "group"
        label = _("Team")

    title = blocks.TextBlock(required=False, label=_("Title"))
    member_list = blocks.ListBlock(Member(), label=_("Member(s)"))


class RPTeamBlock(blocks.StructBlock):
    class UpMembers(blocks.StructBlock):
        photo = ImageChooserBlock(label=_("Photo"))
        link = blocks.URLBlock(required=False, label=_("Profile link"))
        
        class Meta:
            icon = "group"
            label = _("RPMember")

    class DownMembers(blocks.StructBlock):
        photo = ImageChooserBlock(label=_("Photo"))
        link = blocks.URLBlock(required=False, label=_("Profile link"))

        class Meta:
            icon = "group"
            label = _("RPMember")

    class Meta:
        icon = "group"
        label = _("Team")

    title = blocks.TextBlock(required=False, label=_("Title"))
    up_member_list = blocks.ListBlock(UpMembers(), label=_("Member(s) top"))
    down_member_list = blocks.ListBlock(DownMembers(), label=_("Member(s) down"))


class LandingPage(Page):

    THEMES = [("transitive", "Transitive"), ("rp", "RP")]

    # WEBSITE IDENTITY
    website_theme = models.CharField(
        blank=False,
        null=False,
        max_length=32,
        choices=THEMES,
        default=THEMES[0][0],
        verbose_name=_("Theme"),
    )

    website_logo = models.ForeignKey(
        "wagtailimages.Image",
        blank=True,
        null=True,
        on_delete=models.SET_NULL,
        verbose_name=_("Logo"),
        related_name="website_logo",
    )


    # WEBSITE CONTENT
    body = StreamField(
        [
            ("testimonial", TestimonialBlock()),
            ("team", TeamBlock()),
            ("rpteam", RPTeamBlock()),
        ],
        blank = True,
        null = True,
        use_json_field = True
    )

    content_panels = Page.content_panels + [
        MultiFieldPanel(
            [
                FieldPanel("website_theme", widget=forms.Select),
                FieldPanel("website_logo"),
            ],
            _("Identity"),
        ),
        StreamFieldPanel("body"),
    ]


При нажатии кнопки '+' в интерфейсе редактора для добавления нового блока в тело StreamFieldPanel я хочу, чтобы он показывал только один из блоков Team в зависимости от варианта, выбранного в поле 'website_theme' ('TeamBlock' для варианта 'Transitive' и 'RPTeamBlock' для варианта 'RP')

Можно ли это сделать в интерфейсе редактора Wagtail?

Вернуться на верх