Opened 16 years ago
Last modified 4 years ago
#10305 new New feature
Add a form instantiation hook for contrib.admin add/change views
Reported by: | tangc | Owned by: | nobody |
---|---|---|---|
Component: | contrib.admin | Version: | dev |
Severity: | Normal | Keywords: | add_view, change_view, ModelForm |
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
add_view
and change_view
have the following code:
ModelForm = self.get_form(request) ... form = ModelForm(request.POST, request.FILES)
or:
form = ModelForm(initial=initial)
or:
form = ModelForm(request.POST, request.FILES, instance=obj)
I would propose:
if isinstance(ModelForm, ModelFormMetaclass): form = ModelForm(request.POST, request.FILES) else form = ModelForm
This way gives the flexibility to override the function get_form(self, request, obj=None, **kwargs)
, which could return a modelform_factory(self.model, **defaults)
or an instance of a model form.
Attachments (1)
Change History (10)
by , 16 years ago
Attachment: | T10305.diff added |
---|
comment:1 by , 16 years ago
Triage Stage: | Unreviewed → Design decision needed |
---|
comment:3 by , 15 years ago
Summary: | contrib/admin/options.py add_view, change_view → change the way ModelForms are instantiated in add_view, change_view |
---|
Changed the summary to be more informative.
comment:4 by , 14 years ago
Severity: | → Normal |
---|---|
Type: | → New feature |
comment:5 by , 13 years ago
Description: | modified (diff) |
---|---|
Easy pickings: | unset |
Reformatted description to be more readable.
comment:7 by , 12 years ago
Triage Stage: | Design decision needed → Accepted |
---|
I agree with Alex: the proposed API is clumsy. But the need is real, so moving this to accepted. Determine a better API first though.
comment:8 by , 9 years ago
Summary: | change the way ModelForms are instantiated in add_view, change_view → Add a form instantiation hook for contrib.admin add/change views |
---|
#17577 is a duplicate.
comment:9 by , 4 years ago
I've ran into the exact same need and thought it'd be great if ModelAdmin had that instanciate_form
hook.
How does the following sound: The calls to ModelForm(...)
inside _changeform_view could be replaced by self.get_form_instance(ModelForm, request, obj,...)
which would pass any arguments to the ModelForm, but allow developers to intercept the call and maybe set initial values of their own based on the request or the current object.
Actually the get_form_instance
default implementation could also be responsible for calling the get_form
so that the signature doesn't require the form class to be passed (but that might be too many responsibilities for it and make things confusing).
Would be happy to contribute the change if that was fitting :D
My inclination is that this is the wrong way to go about doing this, an "instiate_form" hook or somethign similar is a much better API design IMO.