Джанго - управляющий древовидными структурами - PullRequest
2 голосов
/ 20 января 2011

Я использую Django со следующими (упрощенными) моделями:

class Entity(models.Model):
    name = models.CharField(max_length=30)

class Person(models.Model):
    last_name = models.CharField(max_length=30)
    first_name = models.CharField(max_length=30)
    entity = models.ForeignKey(Entity)

Я бы хотел добавить возможности иерархии в модель сущности (и, соответственно, в Person).

Вопрос: какую реализацию вы порекомендуете, учитывая, что я предпочитаю стабильность системы и простоту обслуживания, а не быстродействующую скорость запросов (хотя недопустимая скорость запросов для ~ 2000 конечных и узловых объектов будет плохой).

1) Реализация иерархического дерева как вложенного набора в базе данных SQL, доступ к которому осуществляется через обычные полевые операции; или

2) Реализовать дерево иерархии вне Django как обычное дерево Python (например, класс Node), получить доступ к информации иерархии с помощью методов модели Django?

Спасибо

Mike

1 Ответ

2 голосов
/ 21 января 2011

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

Я большой поклонник Модифицированного дерева предварительных заказовАлгоритм обхода и его превосходная реализация в Django, django-mptt .

Если вы не работаете на Nested Sets, взгляните на django-treebeard , который предлагает это, Список Смежности и Материализованный Путь.

...