SpecialistOff.NET / Вопросы / Статьи / Фрагменты кода / Резюме / Метки / Помощь / Файлы

Список вопросов Печать

Пример дерева из элементов таблицы на SQLAlchemy


Метки: sqlalchemy python 

Ответы

RemiZOffAlex  Создано: 2017-12-14 09:20:21.100220  Обновлено: 2017-12-14 09:20:21.100220

Файл /models/document.py

import datetime
from sqlalchemy import Table, Column, Boolean, Integer, ForeignKey, String, DateTime
from sqlalchemy.orm import relationship

from . import Base

class Document(Base):
    """Документы"""
    __tablename__ = "document"

    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('document.id'))
    title = Column(String)
    body = Column(String, default='')
    created = Column(DateTime) # Дата создания
    updated = Column(DateTime) # Дата обновления

    # Связи
    # Родитель
    parent = relationship("Document", remote_side=[id])
    # Дочерние узлы
    nodes = relationship(
        "Document",
        primaryjoin="Document.id==Document.parent_id"
    )

    def __init__(self, title):
        self.title = title
        self.created = datetime.datetime.utcnow()
        self.updated = datetime.datetime.utcnow()

    def __repr__(self):
        return "<Document('{}')>".format(self.title)

    @property
    def parents(self):
        item = self
        from .. import app
        while item.parent:
            item = item.parent
            app.logger.info(item)
            yield item

Отображение списка родителей документа в шаблоне. Часть файла document.html

{% if document.parent %}
<small><i class="fa fa-book"></i>
{% for parent in document.parents|reverse %}
<a href="/document/{{ parent.id }}">{{ parent.title }}</a>
{% if not loop.last %} / {% endif %}
{% endfor %}</small>
<br />
{% endif %}

Конечный результат

Возможно будут интересны и другие вопросы