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)
|
||||
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
|
||||
|
||||
|
|
|
@ -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', ))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue