Commit f53e4d80 authored by Jacob Kaplan-Moss's avatar Jacob Kaplan-Moss
Browse files

Added ModelAdmin.save_model() and ModelAdmin.save_formset() methods to allow...

Added ModelAdmin.save_model() and ModelAdmin.save_formset() methods to allow for easier modification of objects/inlines at admin-save time. Refs #6002.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@8266 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 6ba64896
Loading
Loading
Loading
Loading
+18 −7
Original line number Diff line number Diff line
@@ -452,6 +452,19 @@ class ModelAdmin(BaseModelAdmin):
        """
        request.user.message_set.create(message=message)

    def save_model(self, request, form, change):
        """
        Save and return a model given a ModelForm. ``change`` is True if the
        object is being changed, and False if it's being added.
        """
        return form.save(commit=True)

    def save_formset(self, request, form, formset, change):
        """
        Save an inline formset attached to the object.
        """
        formset.save()

    def save_add(self, request, form, formsets, post_url_continue):
        """
        Saves the object in the "add" stage and returns an HttpResponseRedirect.
@@ -459,14 +472,12 @@ class ModelAdmin(BaseModelAdmin):
        `form` is a bound Form instance that's verified to be valid.
        """
        opts = self.model._meta
        new_object = form.save(commit=True)
        
        new_object = self.save_model(request, form, change=False)
        if formsets:
            for formset in formsets:
                # HACK: it seems like the parent obejct should be passed into
                # a method of something, not just set as an attribute
                formset.instance = new_object
                formset.save()
                self.save_formset(request, form, formset, change=False)

        pk_value = new_object._get_pk_val()
        self.log_addition(request, new_object)
@@ -509,12 +520,12 @@ class ModelAdmin(BaseModelAdmin):
        `formsets` is a sequence of InlineFormSet instances that are verified to be valid.
        """
        opts = self.model._meta
        new_object = form.save(commit=True)
        new_object = self.save_model(request, form, change=True)
        pk_value = new_object._get_pk_val()

        if formsets:
            for formset in formsets:
                formset.save()
                self.save_formset(request, form, formset, change=True)
        
        change_message = self.construct_change_message(request, form, formsets)
        self.log_change(request, new_object, change_message)