From c78ba66551946fb942273690e56264654f55c5cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Fri, 7 Jul 2017 14:53:43 +0200 Subject: [PATCH] create cascaded deletion of changed objects in _clean_changes if needed --- src/c3nav/editor/models/changedobject.py | 1 + src/c3nav/editor/models/changeset.py | 15 ++++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/c3nav/editor/models/changedobject.py b/src/c3nav/editor/models/changedobject.py index f27efb80..2d0d4fb6 100644 --- a/src/c3nav/editor/models/changedobject.py +++ b/src/c3nav/editor/models/changedobject.py @@ -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 diff --git a/src/c3nav/editor/models/changeset.py b/src/c3nav/editor/models/changeset.py index 2dd84609..fab8c0af 100644 --- a/src/c3nav/editor/models/changeset.py +++ b/src/c3nav/editor/models/changeset.py @@ -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', ))