如何在每次插入后不重建时构建django-mptt树?

时间:2011-08-27 08:59:40

标签: django django-mptt mptt

我正在建造大型的mptt树。 我想插入所有节点,之后启动方法重建整个树:

for i in range(big_loop):
    ...
    m.save() # Saving mptt object. Tree is rebuild.
some_mptt_model.tree.rebuild()

每次插入后如何避免重建树?

我在.save方法中找到了仅删除的关键字:

  

在早期版本中,MPTTModel.save()有一个raw关键字参数。如果   没错,MPTT字段在保存期间不会更新。这个   (未记录的)论点现已被删除。

2 个答案:

答案 0 :(得分:3)

您可以使用disable_mptt_updates方法在每次插入后禁用重建树:

with MyModel.objects.disable_mptt_updates():
    # some bulk updates...
    for obj in objects:
        obj.save()

# And then you can rebuild the tree.
MyModel.objects.rebuild()

答案 1 :(得分:0)

也许这可以在Proxy models的帮助下解决。在代理模型中,可以覆盖save方法来调用save的{​​{1}}方法而不是MPTT models.Model方法。像这样:

save

我没有尝试这段代码,但我想它可行。