Страницы

Поиск по вопросам

пятница, 7 июня 2019 г.

Описание “дерева” Oracle в Django models.py

Доброго времени суток. Помогите, пожалуйста, со следующим вопросом. Необходимо описать модель дерева в 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 Что, собственно, логично. Как же быть? Спасибо.


Ответ

Рекомендую Вам использовать 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.

Комментариев нет:

Отправить комментарий