2015-02-12 11 views
0

Как добавить новый корневой узел в существующее дерево в django-mptt? Я использую Django 1.7.4 и django-mptt == 0.6.1 с FactoryBoy для проверки деревьев. Я пробовал следующее:Добавить новый корневой узел в дерево django-mptt

my_leaf.move_to(my_root, position='left') # creates a new tree 
my_leaf.move_to(None, position='this_is_ignored') # also creates a new tree 

newroot = factories.MyFactory.build(parent=None, name="NewRoot") 
newroot.insert_at(self.my_root, position='left', save=True) 

Все, что я делаю, создает новое дерево.

ответ

1

Дерево имеет один корневой узел. Если вы пытаетесь добавить новый корневой узел, это означает добавление нового дерева. django-mptt поддерживает либо одно дерево (только создать только один корневой узел), либо целый лес деревьев.

Вам в основном никогда не нужно использовать .move_to(), если вы не делаете что-то действительно особенное, как узлы, упорядоченные вручную пользователем. Просто установите родительский элемент в None. Я не знаю много о FactoryBoy, но обычный способ создания нового корневого узла:

MyNode.objects.create(name='NewRoot', parent=None) 
+0

Спасибо за ответ. Я пытаюсь заменить корневой узел другим. Допустим, я только что обнаружил часть дерева: узел B> узел C> узел D и позже я определяю, что на самом деле есть узел A, который является предком для узлов b, c и d. Как бы поместить узел А в это дерево и сделать его новым корнем? – robline

+1

'A = MyNode.objects.create (name = 'A'); B.parent = A; B.save() 'будет стандартным способом сделать это. – craigds

Смежные вопросы