我正在建造大型的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字段在保存期间不会更新。这个 (未记录的)论点现已被删除。
答案 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
我没有尝试这段代码,但我想它可行。