Django-treebeard Глубина дерева материализованного пути оказалась равна нулю

Я нашел проблемный узел с id 633.

tree.find_problems()
([], [], [], [633], [35, 9, 50, 291, 464])

После выполнения tree.fix_tree() Он не обнаруживает никаких проблем.

tree.find_problems()
([], [], [], [], [])

Но на самом деле 633 все еще находится в каком-то странном состоянии.

>>> node633.depth
0
>>> node633.path
''

Problem: node633.depth is 0 that means its not root but it does not have parent as well. Путь тоже пуст.

Это означает, что мой код попытается найти родителя у узла, у которого нет родителя.

Повторный запуск fix_tree не исправляет ситуацию. Перемещение узла 633 тоже не вариант, потому что:

treebeard.exceptions.InvalidMoveToDescendant: Can't move node to a descendant.

Дополнительная информация:

django-treebeard==4.3
Django==2.2.1

Я не редактировал пути и глубины вручную.

Вопрос: Как я могу починить этот сломанный node633?

Я думаю, что мне не оставалось ничего другого, как просто удалить его. Я запустил:

node633.delete()
tree.find_problems()
([], [], [], [], [])

Находить проблемы все равно приятно.

Это не идеальное решение, но любые лучшие решения приветствуются.

У меня есть способ воспроизвести эту ошибку, импортируя дамп базы данных с этим плохим состоянием.

Вернуться на верх