#oracle #python #дерево #django
Доброго времени суток. Помогите, пожалуйста, со следующим вопросом. Необходимо описать модель дерева в Django. Используемая БД - Oracle. Описываю так: class TelDivisions(models.Model): parent = models.ForeignKey('self') name = models.CharField(max_length=50, blank=True) class Meta: db_table = u'tel_divisions' но таким образом parent ссылается сам на себя. Каким образом сделать так, чтобы он ссылался на столбец id данной таблицы? Думал может получиться вот так: class TelDivisions(models.Model): parent = models.ForeignKey(TelDivisions, db_column='id', blank=True) name = models.CharField(max_length=50, blank=True) class Meta: db_table = u'tel_divisions' но команда python manage.py validate выявила: parent = models.ForeignKey(TelDivisions, db_column='id', blank=True) NameError: name 'TelDivisions' is not defined Что, собственно, логично. Как же быть? Спасибо.
Ответы
Ответ 1
Рекомендую Вам использовать django-mtpp. Она была создана как раз для отображения древовидных структур в реляционной модели. А что касается вашего вопроса: parent = models.ForeignKey('self', db_column='id', blank=True) И всё должно заработать. Ссылаться надо на самого себя через self. Данный пример описан в django docs. И ещё одно. Если не укажите null = True, то не сможете создать ни одного корновего экземпляра (т.е. такого, у которого нет родителя). Итого: parent = models.ForeignKey('self', db_column='id', blank=True, null = True) db_column='id' можно не указывать, т.к. он и так будет ссылаться по умолчанию на ключевое поле таблицы, т.е. id.Ответ 2
Правильно делаешь в первом варианте, в базе будет столбик parent_id типа integer. Гляньте статейку и комментарии почитайте, там есть полезные ссылочки, сам на днях разбирался с этим вопросом: деревья в джанго-шаблонах Если дерево многоуровневое, то mtpp все рекомендуют, но если один уровень вложенности как у меня, то я без дополнительных библиотек обошелся.
Комментариев нет:
Отправить комментарий