#34532: Overriding ModelForm default_renderer has no effect as forms api always
uses renderer from settings
-------------------------------------+-------------------------------------
Reporter: Ryan Burt | Owner: nobody
Type: | Status: new
Uncategorized |
Component: Forms | Version: 4.2
Severity: Normal | Keywords: default_renderer
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
Overriding default_renderer functionality in the ModelForm class
This issue only came into effect on my project upon upgrading from 3.2 to
4.2
settings.py:
{{{
FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'
}}}
myapp/forms.py:
{{{
class MyModelForm(forms.ModelForm):
default_renderer = CustomRenderer
class Meta:
model = MyModel
}}}
Each time the forms api hits the forms.forms.BaseForm.__init__() method in
forms/forms.py, renderer is always not null and the condition for using
the default_renderer is never reached:
{{{
(line 120 in forms/forms.py)
# Initialize form renderer. Use a global default if not specified
# either as an argument or as self.default_renderer.
if renderer is None:
if self.default_renderer is None:
renderer = get_default_renderer()
else:
renderer = self.default_renderer
if isinstance(self.default_renderer, type):
renderer = renderer()
self.renderer = renderer
}}}
Different FORM_RENDERER values seem to have no effect. If I override the
ModelForm init method the renderer is passed in the kwargs, so it is
possible to set it to None. I'm interested in understanding if I have a
compatibility issue in my settings as a result of upgrading versions, or
if the above code block could be restructured to preference
default_renderer if it is not none:
{{{
# Initialize form renderer. Use a global default if not specified
# either as an argument or as self.default_renderer.
if self.default_renderer:
if isinstance(self.default_renderer, type):
renderer = self.default_renderer()
else:
renderer = self.default_renderer
elif renderer is None:
renderer = get_default_renderer()
self.renderer = renderer
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/34532>
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/01070187dfddabe5-10e78566-a3cf-4298-828a-86464893e3fa-000000%40eu-central-1.amazonses.com.