Хранение иерархических (родительских / дочерних) данных в Python / Django: альтернатива MPTT? - PullRequest
5 голосов
/ 23 апреля 2010

Я ищу хороший способ хранения и использования иерархических (родительских / дочерних) данных в Django. Я использую django-mptt , но это кажется совершенно несовместимым с моим мозгом - я получаю неочевидные ошибки в неочевидных местах, в основном, когда перемещаю вещи в дереве: с несовместимым состоянием, где узел и его родитель будут не соглашаться в их отношениях.

Мои потребности просты:

  • Учитывая узел:
    • найти его корень
    • найди своих предков
    • найти его потомков
  • с деревом:
    • легко перемещать узлы (т.е. менять родителя)

Мои деревья будут небольшими (не более 10 тыс. Узлов на 20 уровнях, как правило, намного меньше, скажем, 10 узлов с 1 или 2 уровнями).

Я должен думать, что в python / django должен быть более простой способ создания деревьев. Существуют ли другие подходы, обеспечивающие лучшую работу по поддержанию согласованности?

1 Ответ

3 голосов
/ 23 апреля 2010

django-treebeard - еще один вариант. У него отличная документация. Я считаю, что он отвечает всем вашим требованиям и включает некоторые функции для проверки дерева на наличие проблем и устранения этих проблем в дереве.

Node.find_problems() https://tabo.pe/projects/django-treebeard/docs/1.60/api.html#treebeard.models.Node.find_problems

Node.fix_tree() https://tabo.pe/projects/django-treebeard/docs/1.60/api.html#treebeard.models.Node.fix_tree

...