3

.move_to() メソッドが機能しません。インスタンスを保存し、ノードインスタンスを再ロードすることを人々が推奨する他の投稿を見てきました。しかし、これらのソリューションはどれも、このテスト ケースでは機能しません。._tree_manager.rebuild() も実行しようとしましたが、どちらも機能しません。以下の私のテストコード:

def test_reorder_pages(self):
    p = Page.objects.get(slug='page-1')
    p2 = Page.objects.get(slug='page-2')

    self.assertEqual(1, p.lft)
    self.assertEqual(3, p2.lft)

    p2.move_to(p, 'left')

    p = Page.objects.get(slug='page-1')
    p2 = Page.objects.get(slug='page-2')

    ## Values should now be reversed
    self.assertEqual(3, p.lft)
    self.assertEqual(1, p2.lft)

基本的に私が期待しているのは、ページ2がページ1の「前」(...の左側)に配置されることです。しかし、最後の 2 つのアサートは失敗します。また、他のすべての値 (lft、rght、level、tree_id) を確認しましたが、どれも変更されていませんでした。

私が間違っていることを誰かが知っていますか?

編集: mossplix の提案の後、 Page.tree.rebuild() をもう一度試しました。これはまだ機能しませんが、奇妙な動作に気付きました。move_to() の前に、これらのテストはパスします:

    self.assertEqual(0, p.level)
    self.assertEqual(1, p.lft)
    self.assertEqual(2, p.rght)
    self.assertEqual(1, p.tree_id)

    self.assertEqual(0, p2.level)
    self.assertEqual(3, p2.lft)
    self.assertEqual(4, p2.rght)
    self.assertEqual(1, p.tree_id)

move_to()rebuild( )の後、私が期待しているのは次のとおりです。

    self.assertEqual(0, np.level)
    self.assertEqual(3, np.lft)
    self.assertEqual(4, np.rght)
    self.assertEqual(1, p.tree_id)

    self.assertEqual(0, np2.level)
    self.assertEqual(1, np2.lft)
    self.assertEqual(2, np2.rght)
    self.assertEqual(1, p.tree_id)

ただし、上記のテストは失敗し、詳しく調べてみると、両方のページのすべての属性 (lft、rght、level、tree_id) が同じ値になっています。確かに、これはツリー内でまったく同じ位置を占めていることを意味するため、間違っていますか?

最新の更新: runserver を使用しているようで、動きは完全に機能します。私が抱えている問題は、テスト フレームワークに関連しているようです。TransactionTestCase を使用しようとしましたが、これでも問題は解決しませんでした。テストに関連していることを反映するようにタイトルを更新しました。

4

1 に答える 1

0

明示的に呼び出す必要があるかもしれません

Page.tree.rebuild()
ノードを移動した後

于 2012-04-22T19:41:31.293 に答える