Многоуровневая иерархия в Django? - PullRequest
1 голос
/ 22 июня 2010

Я хочу классифицировать свои записи, суть в том, что я хочу несколько уровней категорий. Пример:

css
    layout
          floats
    specificity, selectors
html
    html 5

В этом примере css и html являются родительскими категориями, у css есть 2 дочерних элемента, а у layout есть дочерний элемент floats.

Полагаю, мне понадобится схема

class Category:
    name = models.TextField()
    parentId = models.IntegerField(blank=True)

Что я не имею в виду, как я могу сделать многоуровневый выпадающий список в моем администраторе, чтобы при публикации записей я мог легко выбрать категорию?

Итак, еще раз, как бы я мог создать многоуровневое вложенное выпадающее меню, чтобы при вводе материала в мою модель ввода я мог выбрать одну категорию для каждой записи?

1 Ответ

5 голосов
/ 22 июня 2010

Кажется, что ваша проблема немного отличается от того, что вы заявляете. Проблема здесь не в том, как отобразить иерархию, а просто:

def __unicode__(self):  
    return self.depth * " "

Облом - это способ захвата и отображения иерархии / глубины. Это распространенная проблема: хранение деревьев в реальных базах данных. Как обычно, ваше решение зависит от компромисса между интенсивностью записи / чтения и степенью нормализации. Вы можете, например, с помощью метода «сохранить» модели рекурсивно добраться до корня и оттуда сохранить атрибут «глубина» на узлах. Я предлагаю использовать django mptt . Это довольно твердо и решает большую часть нормальных препятствий. В качестве бонуса вы получаете хороший API для общих задач дерева.

...