2012-04-22 58 views
3

.move_to()方法不适用于我。我查看了其他人员建议保存实例以及重新加载节点实例的帖子。但是这些解决方案在这个测试案例中都不起作用。我也试图做._tree_manager.rebuild(),这也不起作用。我下面的测试代码:django-mptt:.move_to在测试运行器中不工作

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后()重建()什么,我期待的是:以上

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,但是这也没有解决问题。更新了标题以反映它与测试有关。

回答

0

您可能需要显式调用

Page.tree.rebuild()
移动

+0

我以前试过这个节点之后,并没有奏效。在您的建议后,我再次尝试。仍然不起作用,但我注意到一些奇怪的东西。 它正在改变_both_页面,使它们对于lft,rght,level和tree_id具有相同的值。 – Andre 2012-04-23 11:02:23

+0

编辑我的原始帖子,以反映奇怪的行为。 – Andre 2012-04-23 11:11:39

相关问题