2017-10-17 89 views
0

我有以下StructBlock和StreamBlock如下:添加StreamBlock子項以編程方式鶺鴒

class AccordionItemBlock(StructBlock): 
    title = CharBlock() 
    text = RichTextBlock() 

class AccordionRepeaterBlock(StreamBlock): 
    accordion_item = AccordionItemBlock() 

我需要以編程方式添加它和多個「項目」 CharBlocks此頁:

class BasicPage(Page): 
    body = StreamField([ 
     ('accordion_repeater_block', AccordionRepeaterBlock()), 
    ], null=True) 

這是我如何接近它

page.body = [ 
    (
     'accordion_repeater_block', 
     { 
      'accordion_item', 
      { 
       'title': 'Title goes here', 
       'text': RichText('Testing!'), 
      } 
     } 
    ) 
] 
provider.save() 

無論我把什麼我放在s第二個元組值'accordion_repeater_block'。任何想法如何解決這個問題?

回答

1

找到解決方案!您必須使子塊成爲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()