summaryrefslogtreecommitdiff
path: root/django/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'django/contrib')
-rw-r--r--django/contrib/admin/options.py13
1 files changed, 10 insertions, 3 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index e5502c42d5..e05881b16a 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -2026,13 +2026,16 @@ class ModelAdmin(BaseModelAdmin):
return queryset
return queryset.filter(pk__in=object_pks)
- def _get_formset_with_permissions(self, request, queryset):
+ def _get_formset_with_permissions(self, request, queryset, for_save=False):
"""
Construct a changelist formset, and remove list_editable fields
for objects the user cannot change.
"""
FormSet = self.get_changelist_formset(request)
- formset = FormSet(queryset=queryset)
+ if for_save:
+ formset = FormSet(data=request.POST, files=request.FILES, queryset=queryset)
+ else:
+ formset = FormSet(queryset=queryset)
for form in formset.forms:
if not self.has_change_permission(request, form.instance):
@@ -2158,7 +2161,11 @@ class ModelAdmin(BaseModelAdmin):
modified_objects = self._get_list_editable_queryset(
request, FormSet.get_default_prefix()
)
- cl.formset = FormSet(request.POST, request.FILES, queryset=modified_objects)
+ cl.formset = self._get_formset_with_permissions(
+ request,
+ queryset=modified_objects,
+ for_save=True,
+ )
if cl.formset.is_valid():
self._save_formset(request, cl.formset)