#34937 closed New feature (duplicate)

Provide a get_form_kwargs for the ModelAdmin

Reported by: Willem Van Onsem Owned by: nobody
Component: contrib.admin Version: 4.2
Severity: Normal Keywords: admin, form, form_kwargs
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Willem Van Onsem)

The Django ModelAdmin does not seem to provide a get_form_kwargs, it however has a get_formset_kwargs. The get_form also does not seem to create a form instance, but return a form class: the result of logic that works with the formset_factory.

In understand that renaming get_form to get_formclass will likely break a lot, so that is not an option, but we can define a get_form_kwargs which does not exists up till now, and then use this to generate optionally extra kwargs that are then injected when we *use* the form, so something like:

ModelForm = self.get_form(
    request, obj, change=not add, fields=flatten_fieldsets(fieldsets)
)

# ...

form = ModelForm(request.POST, request.FILES, instance=obj, **self.get_form_kwargs(request))

in the _chageform_view for example. This makes it easy to inject for example the logged in user into the form, which is often done to limit the form fields.

An alternative for that scenario could be to override formfield_for_dbfield, etc. but the problem with these functions is that the scope is limited to a single form field, so it does not really is flexible to do something at the level of the form.

Change History (2)

comment:1 by Willem Van Onsem, 12 months ago

Description: modified (diff)

comment:2 by Tim Graham, 12 months ago

Resolution: duplicate
Status: newclosed

Duplicate of #27231.

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