Джанго - Факультативные рекурсивные отношения - PullRequest
0 голосов
/ 27 января 2012

Я пытаюсь использовать Django для создания рекурсивных отношений, которые дают пользователям иерархическую структуру в виде папок для размещения ресурсов.

Каков наилучший способ добиться этого?

Я знаю, что мог бы использовать treebeard или mptt для создания вложенного набора, но я читал, что внесение изменений в древовидную структуру (что часто случается в этом случае) может быть довольно интенсивной операцией, так как множество полей должны быть обновлены.

С другой стороны, я мог бы создать для себя модель папки с ForeignKey, но как мне управлять папками верхнего уровня без значения внешнего ключа? Будет ли Джанго жаловаться, если я просто установлю это значение в NULL?

Любой совет приветствуется.

Спасибо.

1 Ответ

2 голосов
/ 27 января 2012

Treebeard на самом деле поддерживает три разных реализации дерева, просто выберите ту, которая будет соответствовать вашим потребностям.

  • Список смежностей (быстрые записи за счет медленного чтения)
  • Материализованный путь (вероятно, самый быстрый способ работы с деревьями в SQL)
  • Вложенные наборы (очень эффективное чтение за счет большого объема обслуживания при операциях записи / удаления)

Документы здесь: https://tabo.pe/projects/django-treebeard/docs/tip/

...