coderedcorp / coderedcorp/coderedcms

Form submissions return 404 with Wagtail 7.x due to FormMixin isinstance check

Đang mở
#710 4 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Python
Star
765
Fork
154
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

As @vsalvino and the team know, I am not a programmer and tend to find my way by trial and error (mostly error). So, like many people lately, I've been using Claude Code to assist with web development. The error description below was created by Claude in response to an error I am seeing. I apologize if it's inappropriate to post an issue generated by an LLM (it does look like a pretty good issue description, though...).

## Description

Form submissions are inaccessible in the Wagtail admin (404 error) when using CodeRed CMS 6.0 with Wagtail 7.x. The Forms listing page shows forms correctly, but clicking to view submissions returns a 404.

## Steps to Reproduce

1. Install CodeRed CMS 6.0.0 with Wagtail 7.1.x
2. Create a FormPage with some form fields
3. Submit the form a few times to create submissions
4. Go to Wagtail admin → Forms
5. Click on the form page to view submissions
6. **Result**: 404 error at `/admin/forms/submissions//`

## Root Cause

In May 2025, Wagtail added an `isinstance` check in [`wagtail/contrib/forms/views.py`](https://github.com/wagtail/wagtail/blob/main/wagtail/contrib/forms/views.py#L37) (commit [efd5d49](https://github.com/wagtail/wagtail/commit/efd5d49438d90df5c73981983e873d31873edbde)):

```python
def get_submissions_list_view(request, *args, **kwargs):
page_id = kwargs.get("page_id")
form_page = get_object_or_404(Page, id=page_id).specific
if not isinstance(form_page, FormMixin):
raise Http404 # <-- This causes the 404
return form_page.serve_submissions_list_view(request, *args, **kwargs)
```

The problem is that `CoderedFormMixin` does **not** inherit from `wagtail.contrib.forms.models.FormMixin`:

```python
>>> from wagtail.contrib.forms.models import FormMixin
>>> from coderedcms.models import CoderedFormPage, CoderedFormMixin
>>> issubclass(CoderedFormPage, FormMixin)
False
>>> issubclass(CoderedFormMixin, FormMixin)
False
```

## Suggested Fix

`CoderedFormMixin` should inherit from `wagtail.contrib.forms.models.FormMixin` to pass the isinstance check. This may require reconciling any method/attribute conflicts between the two mixins.

Alternatively, CodeRed CMS could register its own URL route for form submissions that bypasses Wagtail's check.

## Environment

- **CodeRed CMS**: 6.0.0
- **Wagtail**: 7.1.1
- **Python**: 3.14
- **Django**: 5.1.x

## Related

This likely also affects `wagtail-flexible-forms` since `StreamFormMixin` similarly does not inherit from Wagtail's `FormMixin`.

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Hướng nghiên cứu

Bắt đầu với coderedcms.models và kiểm tra CoderedFormMixin cùng với wagtail/contrib/forms/views.py, đặc biệt là get_submissions_list_view và phần kiểm tra FormMixin của Wagtail. Hãy điều chỉnh các mixin để tương thích với nhau mà không làm hỏng hành vi biểu mẫu hiện có, sau đó xác minh rằng URL submissions của admin không còn trả về 404 đối với một biểu mẫu CodeRed trên Wagtail 7.x.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
django, python
Lĩnh vực
backend
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Ít trao đổi
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
55/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.