2012-04-22 33 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

相關問題