#33134: Form with __repr__ crashes.
--------------------------------------------+------------------------
Reporter: Mariusz Felisiak | Owner: nobody
Type: Bug | Status: new
Component: Forms | Version: 4.0
Severity: Release blocker | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
--------------------------------------------+------------------------
I noticed really strange error when trying to test `django-debug-toolbar`
with Django 4.0a1. The following form:
{{{
class TemplateReprForm(forms.Form):
user = forms.ModelChoiceField(queryset=User.objects.all())
def __repr__(self):
return str(self)
}}}
causes `Fatal Python error: Cannot recover from stack overflow`:
{{{
$ export TOXENV=py38-dj40-sqlite
$ tox tests.panels.test_template.TemplatesPanelTestCase.test_template_repr
...
test_template_repr (tests.panels.test_template.TemplatesPanelTestCase) ...
Fatal Python error: Cannot recover from stack overflow.
Python runtime state: initialized
Current thread 0x00007f28e059d740 (most recent call first):
File "/django-debug-toolbar/tests/forms.py", line 9 in __repr__
File "/usr/lib/python3.8/pprint.py", line 569 in _safe_repr
File "/usr/lib/python3.8/pprint.py", line 67 in saferepr
File "/django-debug-toolbar/debug_toolbar/panels/templates/panel.py",
line 123 in _store_template_info
File "/django-debug-toolbar/.tox/py38-dj40-sqlite/lib/python3.8/site-
packages/django/dispatch/dispatcher.py", line 171 in <listcomp>
File "/django-debug-toolbar/.tox/py38-dj40-sqlite/lib/python3.8/site-
packages/django/dispatch/dispatcher.py", line 170 in send
File "/django-debug-toolbar/.tox/py38-dj40-sqlite/lib/python3.8/site-
packages/django/test/utils.py", line 100 in instrumented_test_render
File "/django-debug-toolbar/.tox/py38-dj40-sqlite/lib/python3.8/site-
packages/django/template/base.py", line 176 in render
File "/django-debug-toolbar/.tox/py38-dj40-sqlite/lib/python3.8/site-
packages/django/template/backends/django.py", line 61 in render
File "/django-debug-toolbar/.tox/py38-dj40-sqlite/lib/python3.8/site-
packages/django/forms/renderers.py", line 23 in render
File "/django-debug-toolbar/.tox/py38-dj40-sqlite/lib/python3.8/site-
packages/django/forms/utils.py", line 53 in render
File "/django-debug-toolbar/.tox/py38-dj40-sqlite/lib/python3.8/site-
packages/django/forms/boundfield.py", line 186 in label_tag
File "/django-debug-toolbar/.tox/py38-dj40-sqlite/lib/python3.8/site-
packages/django/template/base.py", line 891 in _resolve_lookup
...
Aborted (core dumped)
make: *** [Makefile:41: coverage] Error 134
}}}
Removing `form` from `context` in `BoundField.label_tag()` fixes this
issue for me:
{{{
diff --git a/django/forms/boundfield.py b/django/forms/boundfield.py
index d1e98719d2..5bbfcbe41c 100644
--- a/django/forms/boundfield.py
+++ b/django/forms/boundfield.py
@@ -177,7 +177,6 @@ class BoundField:
else:
attrs['class'] = self.form.required_css_class
context = {
- 'form': self.form,
'field': self,
'label': contents,
'attrs': attrs,
}}}
I will try to debug it later.
--
Ticket URL: <https://code.djangoproject.com/ticket/33134>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/050.5d7d54e3fe6ff3e7ecf8ec6585396e0a%40djangoproject.com.