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()
([], [], [], [], [])
Находить проблемы все равно приятно.
Это не идеальное решение, но любые лучшие решения приветствуются.
У меня есть способ воспроизвести эту ошибку, импортируя дамп базы данных с этим плохим состоянием.