#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.

Reply via email to