Правильный способ удаления всех записей MpttModel с помощью Django Manager - PullRequest
0 голосов
/ 23 марта 2020

У меня есть модель подкласса Django (Feature) MPTTModel. Поскольку наилучшей практикой для модели MPTT для внешнего ключа является сохранение on_delete=PROTECT, изо всех сил пытаясь удалить все записи MPTT одновременно, используя

        Feature.objects.all().delete()

Я получаю следующую ошибку

django.db.models.deletion.ProtectedError: ("Cannot delete some instances of model 'Feature' because they are referenced through a protected foreign key: 'Feature.parent'"...

Я могу либо сначала удалите все дочерние узлы, а затем root узлы. Но это не кажется эффективным для меня. Есть ли лучший вариант?

1 Ответ

0 голосов
/ 23 марта 2020

Вы должны иметь возможность удалить все узлы, выполнив запрос, чтобы получить все узлы root и просто удалить их. Я не знаю структуру вашей модели, но что-то вроде следующего должно работать:

root_nodes = Feature.objects.filter(parent__isnull=true)
root_nodes.delete()

docs заявляет, что удаление узла root должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...