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