Opened 5 hours ago

Last modified 3 hours ago

#36250 new Bug

admin.widgets.RelatedFieldWidgetWrapper.get_context() bypasses the used renderer

Reported by: Jacob Rief Owned by:
Component: contrib.admin Version: dev
Severity: Normal Keywords:
Cc: Jacob Rief Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

In django.contrib.admin, ForeignKey and ManyToManyField are mapped to a admin.widgets.RelatedFieldWidgetWrapper. This wrapper widget then renders the underling widget using:

def get_context(self, name, value, attrs):
    ...
    context = {
       "rendered_widget": self.widget.render(name, value, attrs),
        ...
    }
    ...

If the RelatedFieldWidgetWrapper itself has been rendered using an alternative renderer, the underling widgets will be rendered using the default renderer instead of the alternative renderer as used to render the said wrapper widget. This may lead to unexpected output.

Possible solution:

By adding the optional argument renderer to the get_context()-method, the widget rendering function could be rewritten as self.widget.render(name, value, attrs, renderer=renderer).

This issue might be related to #34257.

Change History (1)

comment:1 by Sarah Boyce, 3 hours ago

Summary: `admin.widgets.RelatedFieldWidgetWrapper.get_context()` bypasses the used rendereradmin.widgets.RelatedFieldWidgetWrapper.get_context() bypasses the used renderer
Triage Stage: UnreviewedAccepted
Version: 5.2dev

Thank you for the report! This makes sense to me but might be a little fiddly to resolve

Note: See TracTickets for help on using tickets.
Back to Top