Как удалить до n типов данных в self forienkey с помощью django rest framework?
class Directory(models.Model):
name = models.CharField(max_length=100)
parent_directory= models.ForeignKey("self", on_delete=models.SET_NULL, null=True, blank=True)
Я хочу удалить корневую папку и все папки, которые находятся внутри корневой папки (корневая папка означает parent_directory is null в модели Directory), https://i.stack.imgur.com/oszCR.png, На этом рисунке root является базовым каталогом, а остальные папки находятся внутри корневой папки, и если я удалю корневую папку, то все папки, которые находятся внутри корневой папки, должны быть удалены ]
для экзамена:
- корень - родительский_каталог
- тестовые под3 и под4 находятся внутри корневого каталога на основе фото таблицы
- Bhavya находится внутри sub4 на основе фото
- верх находится внутри Bhavya
Теперь, если я хочу удалить объект номер 22 из корневого каталога, то 26, 29, 33 и 34 также должны быть удалены.
Подскажите, пожалуйста, как можно удалить этот объект n-типа без on_delete=models.CASCADE ?
Вы можете сделать итерационный скрипт, который будет собирать все элементы для удаления. Это сделает 𝓞(d) запросы с d глубиной поддерева, таким образом:
from operator import attrgetter
def delete_with_descendants(*directories):
next_gen = directories = set(directories)
while next_gen:
next_gen = Directory.objects.filter(parent_directory__in=next_gen)
directories.update(next_gen)
# directories is a set of Directory objects that you can process
# …
# remove the directories
Directory.objects.filter(pk__in=map(attrgetter('pk'), directories)).delete()
Затем вы можете удалить каталог, включая всех потомков с помощью delete_with_descendants(my_directory)
.