diff options
| author | Honza Král <honza.kral@gmail.com> | 2009-06-01 15:39:21 +0000 |
|---|---|---|
| committer | Honza Král <honza.kral@gmail.com> | 2009-06-01 15:39:21 +0000 |
| commit | 2f0e6d5595acbc517f9fba7dc25bda2b7899dd20 (patch) | |
| tree | 6129dd76358c25ce5b1bd5145e6af496dc6ec2f0 | |
| parent | 6152164303b6b8ac7705873fbebac72177efcb39 (diff) | |
[soc2009/model-validation] Save object before validating it's edit inlines when creating an object
in the admin interface
git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/model-validation@10870 bcc190cf-cafb-0310-a4f2-bffc1f526a37
| -rw-r--r-- | django/contrib/admin/options.py | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 8297eca74e..b21935e19f 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -543,12 +543,12 @@ class ModelAdmin(BaseModelAdmin): """ request.user.message_set.create(message=message) - def save_form(self, request, form, change): + def save_form(self, request, form, change, commit=False): """ Given a ModelForm return an unsaved instance. ``change`` is True if the object is being changed, and False if it's being added. """ - return form.save(commit=False) + return form.save(commit=commit) def save_model(self, request, obj, form, change): """ @@ -714,7 +714,10 @@ class ModelAdmin(BaseModelAdmin): form = ModelForm(request.POST, request.FILES) if form.is_valid(): form_validated = True - new_object = self.save_form(request, form, change=False) + # save the object, even if inline formsets haven't been validated yet + # We need to pass the valid model to the formsets for validation. If + # the formsets do not validate, we will delete the object. + new_object = self.save_form(request, form, change=False, commit=True) else: form_validated = False new_object = self.model() @@ -730,13 +733,14 @@ class ModelAdmin(BaseModelAdmin): prefix=prefix) formsets.append(formset) if all_valid(formsets) and form_validated: - self.save_model(request, new_object, form, change=False) - form.save_m2m() for formset in formsets: self.save_formset(request, form, formset, change=False) self.log_addition(request, new_object) return self.response_add(request, new_object) + elif form_validated: + # delete the saved object + new_object.delete() else: # Prepare the dict of initial data from the request. # We have to special-case M2Ms as a list of comma-separated PKs. |
