Django - после изменения всех обратных связанных объектов родительский объект по-прежнему не может быть удален
У меня есть следующая модель (в демонстрационных целях):
class ProjectModule(models.Model):
name = models.CharField(...)
module = models.ForeignKey('ProjectModule', ....., on_delete=models.PROTECT)
... (many more fields and relations) ...
Я написал функцию для слияния экземпляров, чтобы избавиться от дубликатов и тому подобного. Для этого мне нужно изменить все связанные объекты первого объекта (succumber) и указать им на их нового родителя (подмодуль выжившего). После изменения всех внешних ключей я удаляю объект succumber.
new_parent = survivor.projectmodule_set.filter(name=entry.name).first()
succumber.projectmodule_set.update(module=new_module)
succumber.delete()
Но это не работает, потому что Django выбрасывает следующую ошибку:
"Cannot delete some instances of model 'ProjectModule' because they are referenced through a protected foreign key: 'ProjectModule.module'", <QuerySet [<ProjectModule: 1.1 : LCP : 5583>, <ProjectModule: 1.2 : JB1 : 5583>, <ProjectModule: 1.3 : JB2 : 5583>]>
Теперь я просто изменил эти (обратно) связанные объекты и дал им новый внешний ключ. Их имена даже отражают это (5583 - id нового родителя). Перезагрузка суккумбера перед удалением тоже не помогает. Он просто не может "забыть" эти отношения и поэтому не может быть удален, хотя отношения уже изменились.
Я также попробовал "длинный подход":
for submodule in succumber.projectmodule_set.all():
submodule.module = new_parent
submodule.save()
Но безуспешно. Что я делаю не так?