限制 Wagtail StructBlock 的数量

Phi*_*ord 1 wagtail wagtail-streamfield

我想我对 Wagtail 中的 StructBlocks 和 StreamBlocks 感到困惑,但我无法弄清楚如何限制可以添加到页面中 StreamField 的 StructBlocks 数量。

from wagtail.core.blocks import CharBlock, StructBlock
from wagtail.core.models import Page

class PersonBlock(StructBlock):
    name = CharBlock(blank=False, required=True)
    bio = CharBlock(blank=True, required=False)

class MyPage(Page):
    leader = StreamField(
        [("leader", PersonBlock(max_num=1))], blank=True
    )

    team = StreamField(
        [("team", PersonBlock())], blank=True
    )

    edit_handler = TabbedInterface(
        [
            ObjectList(
                [StreamFieldPanel("leader"), StreamFieldPanel("team")
            ],
            heading="People"),
        ]
    )
Run Code Online (Sandbox Code Playgroud)

我有类似上面的内容,我只希望用户能够添加一个PersonBlock作为leader. 目前他们可以添加多个。我尝试过使用max_num=1,但我认为这只适用于StreamBlocks,而这些是StructBlocks。我哪里出错了?

gas*_*man 5

max_num在 StructBlock 上不可用,因为它描述了块列表的行为,而不是单个 StructBlock。当您使用 定义 StreamField 时StreamField([some set of blocks]),此列表将由顶层的隐式 StreamBlock 处理。StreamField([some set of blocks])实际上只是一个快捷方式StreamField(StreamBlock([some set of blocks]))- 通过完整地写出它,您可以在一个地方附加定义max_num

from wagtail.core.blocks import CharBlock, StructBlock, StreamBlock

class MyPage(Page):
    leader = StreamField(
        StreamBlock(
            [("leader", PersonBlock())],
            max_num=1
        ),
        blank=True
    )
Run Code Online (Sandbox Code Playgroud)