Opened 12 years ago

Last modified 9 years ago

#18166 closed New feature

Allow the formset class to contribute kwargs to form instances — at Initial Version

Reported by: tevans Owned by: nobody
Component: Forms Version: dev
Severity: Normal Keywords: forms formset kwargs
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

When we use a formset, each form is instantiated by the method BaseFormSet._construct_forms(), which is called from BaseFormSet.init()

_construct_forms() allows for additional kwargs to be passed through to the individual form constructor, but BaseFormSet.init() does not provide any mechanism for kwargs to be passed through to the _construct_forms() call.

Also, we may not be able to supply a static unchanging list of kwargs that should be supplied to each form constructor - the kwargs we want to pass may depend upon the specific instance of the form being instantiated.

I propose the following changes:

Add a form_kwargs argument to BaseFormSet.init(). This would be stored on self, and consumed in BaseFormSet._construct_forms()

Add a method, BaseFormSet._kwargs_for_form(self, i). This method would be called for each form instantiated, passing the index of the form within the formset. The return value of this method would be merged with the form_kwargs supplied in BaseFormSet.init() and used to instantiate the form.

With these changes, a user could add additional constructor arguments to all forms by passing in form_kwargs to the formset constructor, and could add additional constructor arguments to specific forms by implementing _kwargs_for_form on a derived BaseFormSet class.

(I found it strange, when BaseFormSet was written, it was clearly intended to be able to pass kwargs to the forms - _construct_form() allows for it, there just is not the plumbing to do so. I worked around this by redefining - copy/pasting - the _construct_forms() method in my derived BaseFormSet class)

Patch doesn't have tests or doc changes, will add if this idea gets traction.

Cheers

Tom

Change History (1)

by tevans, 12 years ago

Patch implementing features described in ticket

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