summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/contrib/admin/options.py22
1 files changed, 16 insertions, 6 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index 71f565f1e8..cd6d592427 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -309,6 +309,20 @@ class ModelAdmin(BaseModelAdmin):
"""
return self.queryset(request)
+ def form_add(self, request):
+ """
+ Returns a Form class for use in the admin add view.
+ """
+ fields = flatten_fieldsets(self.fieldsets_add(request))
+ return forms.form_for_model(self.model, fields=fields, formfield_callback=self.formfield_for_dbfield)
+
+ def form_change(self, request, obj):
+ """
+ Returns a Form class for use in the admin change view.
+ """
+ fields = flatten_fieldsets(self.fieldsets_change(request, obj))
+ return forms.form_for_instance(obj, fields=fields, formfield_callback=self.formfield_for_dbfield)
+
def save_add(self, request, model, form, formsets, post_url_continue):
"""
Saves the object in the "add" stage and returns an HttpResponseRedirect.
@@ -423,9 +437,7 @@ class ModelAdmin(BaseModelAdmin):
# Object list will give 'Permission Denied', so go back to admin home
post_url = '../../../'
- fields = flatten_fieldsets(self.fieldsets_add(request))
- ModelForm = forms.form_for_model(model, fields=fields, formfield_callback=self.formfield_for_dbfield)
-
+ ModelForm = self.form_add(request)
inline_formsets = []
if request.method == 'POST':
form = ModelForm(request.POST, request.FILES)
@@ -485,9 +497,7 @@ class ModelAdmin(BaseModelAdmin):
if request.POST and request.POST.has_key("_saveasnew"):
return self.add_view(request, form_url='../../add/')
- fields = flatten_fieldsets(self.fieldsets_change(request, obj))
- ModelForm = forms.form_for_instance(obj, fields=fields, formfield_callback=self.formfield_for_dbfield)
-
+ ModelForm = self.form_change(request, obj)
inline_formsets = []
if request.method == 'POST':
form = ModelForm(request.POST, request.FILES)