gpt4 book ai didi

django-mptt : . move_to 在测试运行器中不起作用

转载 作者:行者123 更新时间:2023-12-02 05:06:52 27 4
gpt4 key购买 nike

.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,这些 Action 完美无缺。我遇到的问题似乎与测试框架有关。我尝试使用 TransactionTestCase 但这也没有解决问题。更新标题以反射(reflect)它与测试相关。

最佳答案

您可能需要显式调用

Page.tree.rebuild()
move 节点后

关于django-mptt : . move_to 在测试运行器中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10270749/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com