2012-04-22 2 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), и ни один из из них изменился.

Кто-нибудь знает, что я делаю неправильно?

EDIT: После предложения 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). Неужели это неправильно, поскольку это означает, что они занимают то же самое положение в дереве?

Последнее обновление: Похоже, что с помощью сервера-запуска работает отлично. Проблемы, которые возникают у меня, похоже, связаны с платформой тестирования. Я попытался использовать TransactionTestCase, но это также не решило проблему. Обновленное название, чтобы отразить, что оно связано с тестами.

ответ

0

вам, возможно, придется явно вызывать

Page.tree.rebuild()
после перемещения узлов

+0

Я пробовал это раньше, и это не сработало. после вашего предложения, я попробовал еще раз. Все еще не работает, но я заметил что-то странное. Он меняет _both_ страницы так, что они имеют одинаковые значения для lft, rght, level, tree_id. – Andre

+0

Отредактировано мое оригинальное сообщение, чтобы отразить странное поведение. – Andre

 Смежные вопросы

  • Нет связанных вопросов^_^