4

大きなmpttツリーを構築しています。すべてのノードを挿入した後、ツリー全体を再構築するためのメソッドを開始します。

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

各挿入後にツリーを再構築しないようにするにはどうすればよいですか?

メソッドで廃止されたキーワードのみが見つかりました.save

以前のバージョンでは、MPTTModel.save() に生のキーワード引数がありました。True の場合、MPTT フィールドは保存中に更新されません。この (文書化されていない) 引数は削除されました。

4

2 に答える 2

4

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()
于 2014-08-30T12:41:20.243 に答える
0

おそらく、これはProxy modelsの助けを借りて解決できます。プロキシ モデルでは、saveメソッドをオーバーライドして、MPTTメソッドsaveの代わりにメソッドを呼び出すことができます。このようなもの:models.Modelsave

class MyNonMPTTModel(MyMPTTModel):
    class Meta:
        proxy = True

    def save(self, *args, **kwargs):
        super(models.Model, self).save(*args, **kwargs)

このコードは試していませんが、うまくいくと思います。

于 2012-04-18T14:19:04.403 に答える