This document details the block types provided by Wagtail for use in StreamField, and how they can be combined into new block types.
Changed in version 3.0: The required use_json_field argument is added.
body = StreamField([
    ('heading', blocks.CharBlock(form_classname="title")),
    ('paragraph', blocks.RichTextBlock()),
    ('image', ImageChooserBlock()),
], block_counts={
    'heading': {'min_num': 1},
    'image': {'max_num': 5},
}, use_json_field=True)
 All block definitions accept the following optional keyword arguments:
default
label
ListBlock - the empty string).icon
wagtail.contrib.styleguide to your project’s INSTALLED_APPS.template
group
Since StreamField accepts an instance of StreamBlock as a parameter, in place of a list of block types, this makes it possible to re-use a common set of block types without repeating definitions:
class HomePage(Page):
    carousel = StreamField(
        CarouselBlock(max_num=10, block_counts={'video': {'max_num': 2}}),
        use_json_field=True
    )
 StreamBlock accepts the following additional options as either keyword arguments or Meta properties:
body = StreamField([
    # ...
    ('event_promotions', blocks.StreamBlock([
        ('hashtag', blocks.CharBlock()),
        ('post_date', blocks.DateBlock()),
    ], form_classname='event-promotions')),
], use_json_field=True)
 class EventPromotionsBlock(blocks.StreamBlock):
    hashtag = blocks.CharBlock()
    post_date = blocks.DateBlock()
    class Meta:
        form_classname = 'event-promotions'
 
    © 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
    https://docs.wagtail.org/en/stable/reference/streamfield/blocks.html