2017-10-17 6 views
0

je les suivantes StructBlock et StreamBlock ci-dessous:Ajouter les articles enfant StreamBlock programme dans Bergeronnette

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

class AccordionRepeaterBlock(StreamBlock): 
    accordion_item = AccordionItemBlock() 

Je dois ajouter programmation et plusieurs "item" CharBlocks à cette page:

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

Cette est comment je l'approche

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

Je reçois des erreurs, peu importe ce que je m la valeur du tuple après 'accordéion_repeater_block'. Des idées pour résoudre ceci?

Répondre

1

trouvé la solution! Vous devez faire en sorte que l'enfant bloque une instance de 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()