限制 Wagtail 结构块的数量
Limiting number of Wagtail StructBlocks
我想我对 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"),
]
)
我有类似上面的东西,我只希望用户能够添加一个 PersonBlock
作为 leader
。目前他们可以添加多个。我试过使用 max_num=1
,但我认为这仅适用于 StreamBlock
,而这些是 StructBlock
。我哪里错了?
max_num
在 StructBlock 上不可用,因为它描述了 list 块的行为,而不是单个 StructBlock。当您使用 StreamField([some set of blocks])
定义 StreamField 时,此列表由顶层的隐式 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
)
我想我对 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"),
]
)
我有类似上面的东西,我只希望用户能够添加一个 PersonBlock
作为 leader
。目前他们可以添加多个。我试过使用 max_num=1
,但我认为这仅适用于 StreamBlock
,而这些是 StructBlock
。我哪里错了?
max_num
在 StructBlock 上不可用,因为它描述了 list 块的行为,而不是单个 StructBlock。当您使用 StreamField([some set of blocks])
定义 StreamField 时,此列表由顶层的隐式 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
)