Как добиться возврата упорядоченного списка при обращении к полю с relationship() в SQLAlchemy ORM?

В SQLAlchemy при создании связи между таблицами можно использовать OrderingList, для которого возможно задать сортировку по определённому полю, но как добиться такого поведения, чтобы сохранялся изначально заданный порядок (как для списков в python>3.6), т.е. чтобы при попытке получения списка связанных элементов через ORM, он был отсортирован в том порядке, в котором в него добавлялись элементы (например, при помощи append(). Пример из документации:

from sqlalchemy.ext.orderinglist import ordering_list

Base = declarative_base()

class Slide(Base):
    __tablename__ = 'slide'

    id = Column(Integer, primary_key=True)
    name = Column(String)

    bullets = relationship("Bullet", order_by="Bullet.position",
                            collection_class=ordering_list('position'))

class Bullet(Base):
    __tablename__ = 'bullet'
    id = Column(Integer, primary_key=True)
    slide_id = Column(Integer, ForeignKey('slide.id'))
    position = Column(Integer)
    text = Column(String)

Если использовать связь многие к одному, как в представленном примере, то можно следуя документации использовать для сортировки поле position, заменив его на order и т.п. Но что делать в случае отношения многие-ко-многим, когда порядок будет различаться в зависимости от связанного элемента? Вариант с дублированием элементов при различных значениях в поле order для меня является наиболее простым решением, однако возможно ли подобное реализовать без дублирования?


Ответы (0 шт):