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