@@ -49,3 +49,178 @@ class Tree(Base, BaseNestedSets):
4949Tree.register_tree()
5050```
5151Now you can add, move and delete obj
52+
53+ Insert node
54+ -----------
55+
56+ ``` python
57+ node = Tree(parent_id = 6 )
58+ session.add(node)
59+ ```
60+
61+ level Nested sets example
62+ 1 1(1)22
63+ _______________|___________________
64+ | | |
65+ 2 2(2)5 6(4)11 12(7)21
66+ | ^ ^
67+ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20
68+ | |
69+ 4 14(9)15 18(11)19
70+
71+ level Insert node with parent_id == 6
72+ 1 1(1)24
73+ _______________|_________________
74+ | | |
75+ 2 2(2)5 6(4)13 14(7)23
76+ | ____|____ ___|____
77+ | | | | |
78+ 3 3(3)4 7(5)8 9(6)12 15(8)18 19(10)22
79+ | | |
80+ 4 10(23)11 16(9)17 20(11)21
81+
82+ Delete node
83+ -----------
84+
85+ ``` python
86+ node = session.query(Tree).filter(Tree.id == 4 ).one()
87+ session.delete(node)
88+ ```
89+
90+ level Nested sets example
91+ 1 1(1)22
92+ _______________|___________________
93+ | | |
94+ 2 2(2)5 6(4)11 12(7)21
95+ | ^ ^
96+ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20
97+ | |
98+ 4 14(9)15 18(11)19
99+
100+ level Delete node == 4
101+ 1 1(1)16
102+ _______________|_____
103+ | |
104+ 2 2(2)5 6(7)15
105+ | ^
106+ 3 3(3)4 7(8)10 11(10)14
107+ | |
108+ 4 8(9)9 12(11)13
109+
110+ Update node
111+ -----------
112+
113+ ``` python
114+ node = session.query(Tree).filter(Tree.id == 8 ).one()
115+ node.parent_id = 5
116+ session.add(node)
117+ ```
118+
119+ level Nested sets example
120+ 1 1(1)22
121+ _______________|___________________
122+ | | |
123+ 2 2(2)5 6(4)11 12(7)21
124+ | ^ ^
125+ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20
126+ | |
127+ 4 14(9)15 18(11)19
128+
129+ level Move 8 - > 5
130+ 1 1(1)22
131+ _______________|__________________
132+ | | |
133+ 2 2(2)5 6(4)15 16(7)21
134+ | ^ |
135+ 3 3(3)4 7(5)12 13(6)14 17(10)20
136+ | |
137+ 4 8(8)11 18(11)19
138+ |
139+ 5 9(9)10
140+
141+ Move node (support multitree)
142+ -----------------------------
143+
144+ ![ Nested sets multitree] ( https://rawgithub.com/ITCase/sqlalchemy_mptt/master/docs/img/3_sqlalchemy_mptt_multitree.svg )
145+
146+ ``` python
147+ node = session.query(Tree).filter(Tree.id == 4 ).one()
148+ node.move_inside(" 15" )
149+ ```
150+ 4 -> 15
151+ level Nested sets tree1
152+ 1 1(1)16
153+ _______________|_____________________
154+ | |
155+ 2 2(2)5 6(7)15
156+ | ^
157+ 3 3(3)4 7(8)10 11(10)14
158+ | |
159+ 4 8(9)9 12(11)13
160+
161+ level Nested sets tree2
162+ 1 1(12)28
163+ ________________|_______________________
164+ | | |
165+ 2 2(13)5 6(15)17 18(18)27
166+ | ^ ^
167+ 3 3(14)4 7(4)12 13(16)14 15(17)16 19(19)22 23(21)26
168+ ^ | |
169+ 4 8(5)9 10(6)11 20(20)21 24(22)25
170+
171+ ``` python
172+ node = session.query(Tree).filter(Tree.id == 8 ).one()
173+ node.move_after(" 5" )
174+ ```
175+
176+ level Nested sets example
177+ 1 1(1)22
178+ _______________|___________________
179+ | | |
180+ 2 2(2)5 6(4)11 12(7)21
181+ | ^ ^
182+ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20
183+ | |
184+ 4 14(9)15 18(11)19
185+
186+ level Move 8 after 5
187+ 1 1(1)22
188+ _______________|__________________
189+ | | |
190+ 2 2(2)5 6(4)15 16(7)21
191+ | ^ |
192+ 3 3(3)4 7(5)8 9(8)12 13(6)14 17(10)20
193+ | |
194+ 4 10(9)11 18(11)19
195+
196+ Move to top level
197+
198+ ``` python
199+ node = session.query(Tree).filter(Tree.id == 15 ).one()
200+ node.move_after(" 1" )
201+ ```
202+
203+ level tree_id = 1
204+ 1 1(1)22
205+ _______________|___________________
206+ | | |
207+ 2 2(2)5 6(4)11 12(7)21
208+ | ^ ^
209+ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20
210+ | |
211+ 4 14(9)15 18(11)19
212+
213+ level tree_id = 2
214+ 1 1(15)6
215+ ^
216+ 2 2(16)3 4(17)5
217+
218+ level tree_id = 3
219+ 1 1(12)16
220+ _______________|
221+ | |
222+ 2 2(13)5 6(18)15
223+ | ^
224+ 3 3(14)4 7(19)10 11(21)14
225+ | |
226+ 4 8(20)9 12(22)13
0 commit comments