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 页的“之前”(在...的左侧)。但是最后两个断言失败了。我还检查了所有其他值(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 回答