summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/contrib/admin/options.py49
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())