1
0
mirror of https://github.com/django/django.git synced 2025-10-31 09:41:08 +00:00

Refs #27852 -- Fixed object deletion to show all restricted related objects rather than just the first one.

This commit is contained in:
Hasan Ramezani
2020-01-28 10:51:36 +01:00
committed by Mariusz Felisiak
parent 2a6fc89018
commit 4ca5c565f4
3 changed files with 41 additions and 22 deletions

View File

@@ -328,19 +328,23 @@ class Collector:
self.clear_restricted_objects_from_set(related_model, instances)
for qs in self.fast_deletes:
self.clear_restricted_objects_from_queryset(qs.model, qs)
for model, fields in self.restricted_objects.items():
for field, objs in fields.items():
for obj in objs:
raise RestrictedError(
"Cannot delete some instances of model '%s' "
"because they are referenced through a restricted "
"foreign key: '%s.%s'." % (
field.remote_field.model.__name__,
obj.__class__.__name__,
field.name,
),
objs,
)
if self.restricted_objects.values():
restricted_objects = defaultdict(list)
for related_model, fields in self.restricted_objects.items():
for field, objs in fields.items():
if objs:
key = "'%s.%s'" % (related_model.__name__, field.name)
restricted_objects[key] += objs
if restricted_objects:
raise RestrictedError(
'Cannot delete some instances of model %r because '
'they are referenced through restricted foreign keys: '
'%s.' % (
model.__name__,
', '.join(restricted_objects),
),
chain.from_iterable(restricted_objects.values()),
)
def related_objects(self, related_model, related_fields, objs):
"""