Skip to content

KeyError: 'body-count' when opening a page with WagtailFormBlock in streamfields #214

@pdeero

Description

@pdeero

I am encountering a KeyError: 'body-count' error when trying to open a page for editing in Wagtail that includes a WagtailFormBlock in the streamfields.

Steps to reproduce:

Create a page with a WagtailFormBlock in the streamfields
You should not be able to see the body cause it should be buggy cause the WagtailFormBlock

Actual behavior:

Encountering a KeyError: 'body-count' error when attempting to open the page for editing.

Environment:

Django==4.1.1
wagtail==4.2.2
wagtail_localize==1.3.3
django-extensions==3.2.0
psycopg2==2.9.3
loglevel==0.1.2
Wand==0.6.10
django-redis==5.2.0
sentry-sdk==1.10.1
wagtail-honeypot==1.0.0
wagtail-transfer==0.8.5
wagtailstreamforms==3.22.0

Used page class:

class LandingPage(Page):
    template = "home/landing_page.html"
    body = StreamField([
        ('form', WagtailFormBlock())
    ])
    content_panels = Page.content_panels + [
        FieldPanel("body"),
    ]

    parent_page_types = ["hintbox.HomePage"]
    subpage_types = []

    class Meta:
        verbose_name = "Landing Page"

Console error:

Traceback (most recent call last):
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/django/utils/datastructures.py", line 84, in __getitem__
    list_ = super().__getitem__(key)
KeyError: 'body-count'

During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/django/views/decorators/cache.py", line 62, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/wagtail/admin/urls/__init__.py", line 175, in wrapper
    return view_func(request, *args, **kwargs)
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/wagtail/admin/auth.py", line 186, in decorated_view
    response = view_func(request, *args, **kwargs)
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 103, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/wagtail/admin/views/generic/preview.py", line 30, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 142, in dispatch
    return handler(request, *args, **kwargs)
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/wagtail/admin/views/generic/preview.py", line 73, in post
    form = self.get_form(request.POST)
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/wagtail/admin/views/pages/preview.py", line 98, in get_form
    if form.is_valid():
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/wagtail/admin/forms/pages.py", line 176, in is_valid
    return super().is_valid()
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/modelcluster/forms.py", line 343, in is_valid
    form_is_valid = super().is_valid()
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/django/forms/forms.py", line 205, in is_valid
    return self.is_bound and not self.errors
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/django/forms/forms.py", line 200, in errors
    self.full_clean()
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/django/forms/forms.py", line 437, in full_clean
    self._clean_fields()
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/django/forms/forms.py", line 444, in _clean_fields
    value = bf.initial if field.disabled else bf.data
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/django/forms/boundfield.py", line 127, in data
    return self.form._widget_data_value(self.field.widget, self.html_name)
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/django/forms/forms.py", line 224, in _widget_data_value
    return widget.value_from_datadict(self.data, self.files, html_name)
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/wagtail/blocks/base.py", line 576, in value_from_datadict
    return self.block_def.value_from_datadict(data, files, name)
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/wagtail/blocks/stream_block.py", line 104, in value_from_datadict
    count = int(data["%s-count" % prefix])
  File "/Users/pdeero/Projekte/website/venv/lib/python3.8/site-packages/django/utils/datastructures.py", line 86, in __getitem__
    raise MultiValueDictKeyError(key)
django.utils.datastructures.MultiValueDictKeyError: 'body-count'

Please let me know if there is any further information I can provide to help troubleshoot this issue.

Thanks for help in advance.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions