.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,但是這也沒有解決問題。更新了標題以反映它與測試有關。
我以前試過這個節點之後,並沒有奏效。在您的建議後,我再次嘗試。仍然不起作用,但我注意到一些奇怪的東西。 它正在改變_both_頁面,使它們對於lft,rght,level和tree_id具有相同的值。 – Andre 2012-04-23 11:02:23
編輯我的原始帖子,以反映奇怪的行爲。 – Andre 2012-04-23 11:11:39