labd / wagtailstreamforms

What happened when a FormBuilder met a StreamField
http://wagtailstreamforms.readthedocs.io
MIT License
156 stars 80 forks source link

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

Open pdeero opened 1 year ago

pdeero commented 1 year ago

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.

pdeero commented 1 year ago

Does anybody has an idea to fix this problem?

umair313 commented 1 week ago

having the same issue looking for solution.

umair313 commented 1 week ago

For me re-starting the server fix the solution.