我正在使用Ben Firshman的django-MPTT 分支(感谢Daniel Roseman的推荐)。
我试图重新排序共享相同父级的节点。我有一个主键列表,像这样:
所有这些节点都有一个父节点,假设其主键为1。
目前,这些节点的顺序是[5, 3, 9, 7],如何将它们重新排序为[5, 9, 7, 3]?
我尝试了类似于以下内容:
我希望它能按照
如果我在阅读
我可能已经在尝试弄清楚这个问题时搞砸了我的模型表,所以也许上面的代码实际上是正确的。也可能有一种更优雅的方法来实现这一点(也许不涉及
我是否误解了什么?
奖励问题:有没有一种方法可以强制django-MPTT重建给定模型的所有实例的
我试图重新排序共享相同父级的节点。我有一个主键列表,像这样:
ids = [5, 9, 7, 3]
所有这些节点都有一个父节点,假设其主键为1。
目前,这些节点的顺序是[5, 3, 9, 7],如何将它们重新排序为[5, 9, 7, 3]?
我尝试了类似于以下内容:
last_m = MyModel.get(pk = ids.pop(0))
last_m.move_to(last_m.parent, position='first-child')
for id in ids:
m = MyModel.get(pk = id)
m.move_to(last_m, position='right')
我希望它能按照
move_to
文档所述做我想要的事情,但它似乎没有改变任何东西。有时它似乎会将ids
中的第一个项目移动到其父项的第一个子项,有时则不会。如果我在阅读
move_to
文档时理解正确,那么在兄弟节点上使用n
调用move_to
,并将position=right
和目标设为n
将使n
立即移动到目标后面,这样对吗?我可能已经在尝试弄清楚这个问题时搞砸了我的模型表,所以也许上面的代码实际上是正确的。也可能有一种更优雅的方法来实现这一点(也许不涉及
O(n)
选择和O(n)
更新)。我是否误解了什么?
奖励问题:有没有一种方法可以强制django-MPTT重建给定模型的所有实例的
lft
和rght
值?