create cascaded deletion of changed objects in _clean_changes if needed
This commit is contained in:
parent
7c2155f22e
commit
c78ba66551
2 changed files with 11 additions and 5 deletions
|
@ -196,6 +196,7 @@ class ChangedObject(models.Model):
|
||||||
field = self.model_class._meta.get_field(name)
|
field = self.model_class._meta.get_field(name)
|
||||||
if field.is_relation:
|
if field.is_relation:
|
||||||
if value in deleted_object_pks[field.related_model]:
|
if value in deleted_object_pks[field.related_model]:
|
||||||
|
deleted_object_pks[self.model_class].add(self.obj_pk)
|
||||||
self.delete()
|
self.delete()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
|
@ -193,12 +193,17 @@ class ChangeSet(models.Model):
|
||||||
pks = set(pk for pk in pks if not is_created_pk(pk))
|
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))
|
deleted_object_pks[model] = pks - set(model.objects.filter(pk__in=pks).values_list('pk', flat=True))
|
||||||
|
|
||||||
for changed_object in changed_objects:
|
repeat = True
|
||||||
if changed_object.handle_deleted_object_pks(deleted_object_pks):
|
while repeat:
|
||||||
to_save.add(changed_object)
|
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
|
# remove deleted objects
|
||||||
changed_objects = [obj for obj in changed_objects if obj.pk is not None]
|
changed_objects = [obj for obj in changed_objects if obj.pk is not None]
|
||||||
|
|
||||||
# clean updated fields
|
# clean updated fields
|
||||||
objects = self.get_objects(many=False, changed_objects=changed_objects, prefetch_related=('groups', ))
|
objects = self.get_objects(many=False, changed_objects=changed_objects, prefetch_related=('groups', ))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue