I have the following StructBlock and StreamBlock below:
class AccordionItemBlock(StructBlock):
title = CharBlock()
text = RichTextBlock()
class AccordionRepeaterBlock(StreamBlock):
accordion_item = AccordionItemBlock()
I need to programmatically add it and multiple "item" CharBlocks to this page:
class BasicPage(Page):
body = StreamField([
('accordion_repeater_block', AccordionRepeaterBlock()),
], null=True)
This is how I am approaching it
page.body = [
(
'accordion_repeater_block',
{
'accordion_item',
{
'title': 'Title goes here',
'text': RichText('Testing!'),
}
}
)
]
provider.save()
I get errors no matter what I put in the second tuple value after 'accordion_repeater_block'. Any ideas how to solve this?
Found the solution! You have to make the child blocks an instance of StreamValue.StreamChild:
from wagtail.wagtailcore.blocks.stream_block import StreamValue
page.body = [
('accordion_repeater_block',
[
StreamValue.StreamChild(
id=None,
block=AccordionItemBlock(),
value={
'title': 'Title goes here',
'text': RichText('Testing!'),
}
),
]
)
]
page.save()