create cascaded deletion of changed objects in _clean_changes if needed

This commit is contained in:
Laura Klünder 2017-07-07 14:53:43 +02:00
parent 7c2155f22e
commit c78ba66551
2 changed files with 11 additions and 5 deletions

View file

@ -196,6 +196,7 @@ class ChangedObject(models.Model):
field = self.model_class._meta.get_field(name)
if field.is_relation:
if value in deleted_object_pks[field.related_model]:
deleted_object_pks[self.model_class].add(self.obj_pk)
self.delete()
return False

View file

@ -193,12 +193,17 @@ class ChangeSet(models.Model):
pks = set(pk for pk in pks if not is_created_pk(pk))
deleted_object_pks[model] = pks - set(model.objects.filter(pk__in=pks).values_list('pk', flat=True))
for changed_object in changed_objects:
if changed_object.handle_deleted_object_pks(deleted_object_pks):
to_save.add(changed_object)
repeat = True
while repeat:
repeat = False
for changed_object in changed_objects:
if changed_object.handle_deleted_object_pks(deleted_object_pks):
to_save.add(changed_object)
if changed_object.pk is None:
repeat = True
# remove deleted objects
changed_objects = [obj for obj in changed_objects if obj.pk is not None]
# remove deleted objects
changed_objects = [obj for obj in changed_objects if obj.pk is not None]
# clean updated fields
objects = self.get_objects(many=False, changed_objects=changed_objects, prefetch_related=('groups', ))