diff options
Diffstat (limited to 'django/contrib/admin/options.py')
| -rw-r--r-- | django/contrib/admin/options.py | 49 |
1 files changed, 25 insertions, 24 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 4841661f16..2d37f26de1 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -2022,6 +2022,30 @@ class ModelAdmin(BaseModelAdmin): return queryset return queryset.filter(pk__in=object_pks) + def _save_formset(self, request, formset): + changecount = 0 + with transaction.atomic(using=router.db_for_write(self.model)): + for form in formset.forms: + if form.has_changed(): + obj = self.save_form(request, form, change=True) + if obj._state.adding: + raise BadRequest("list_editable does not allow adding.") + self.save_model(request, obj, form, change=True) + self.save_related(request, form, formsets=[], change=True) + change_msg = self.construct_change_message(request, form, None) + self.log_change(request, obj, change_msg) + changecount += 1 + if changecount: + msg = ngettext( + "%(count)s %(name)s was changed successfully.", + "%(count)s %(name)s were changed successfully.", + changecount, + ) % { + "count": changecount, + "name": model_ngettext(self.opts, changecount), + } + self.message_user(request, msg, messages.SUCCESS) + @csrf_protect_m def changelist_view(self, request, extra_context=None): """ @@ -2115,30 +2139,7 @@ class ModelAdmin(BaseModelAdmin): ) cl.formset = FormSet(request.POST, request.FILES, queryset=modified_objects) if cl.formset.is_valid(): - changecount = 0 - with transaction.atomic(using=router.db_for_write(self.model)): - for form in cl.formset.forms: - if form.has_changed(): - obj = self.save_form(request, form, change=True) - if obj._state.adding: - raise BadRequest("list_editable does not allow adding.") - self.save_model(request, obj, form, change=True) - self.save_related(request, form, formsets=[], change=True) - change_msg = self.construct_change_message( - request, form, None - ) - self.log_change(request, obj, change_msg) - changecount += 1 - if changecount: - msg = ngettext( - "%(count)s %(name)s was changed successfully.", - "%(count)s %(name)s were changed successfully.", - changecount, - ) % { - "count": changecount, - "name": model_ngettext(self.opts, changecount), - } - self.message_user(request, msg, messages.SUCCESS) + self._save_formset(request, cl.formset) return HttpResponseRedirect(request.get_full_path()) |
