Fixed #33346 -- Fixed SimpleTestCase.assertFormsetError() crash on a formset named "form".

Thanks OutOfFocus4 for the report.

Regression in 456466d932.
This commit is contained in:
Baptiste Mispelon 2021-12-08 14:46:22 +01:00 committed by Mariusz Felisiak
parent 8a4e506760
commit cb383753c0
3 changed files with 14 additions and 2 deletions

View File

@ -572,7 +572,7 @@ class SimpleTestCase(unittest.TestCase):
# Search all contexts for the error.
found_formset = False
for i, context in enumerate(contexts):
if formset not in context:
if formset not in context or not hasattr(context[formset], 'forms'):
continue
found_formset = True
for err in errors:

View File

@ -9,4 +9,6 @@ Django 4.0.1 fixes several bugs in 4.0.
Bugfixes
========
* ...
* Fixed a regression in Django 4.0 that caused a crash of
:meth:`~django.test.SimpleTestCase.assertFormsetError` on a formset named
``form`` (:ticket:`33346`).

View File

@ -1512,6 +1512,16 @@ class AssertFormsetErrorTests(SimpleTestCase):
])
self.assertFormsetError(response, 'formset', None, None, 'error')
def test_formset_named_form(self):
formset = TestFormset.invalid()
# The mocked context emulates the template-based rendering of the
# formset.
response = mock.Mock(context=[
{'form': formset},
{'form': formset.management_form},
])
self.assertFormsetError(response, 'form', 0, 'field', 'invalid value')
class FirstUrls:
urlpatterns = [path('first/', empty_response, name='first')]