У меня есть таблица серверов, и хотелось бы иметь цепочку для каждого сервера, состоящую из следующих серверов, к которым должен подключиться пользователь.
Попробовал следующий подход.
Код: Выделить всё
class ServerChain(Base):
__tablename__ = "server_chains"
server_id = Column(Integer, ForeignKey("servers.id"), primary_key=True)
chained_server_id = Column(Integer, ForeignKey("servers.id"))
seq = Column(Integer, primary_key=True)
class Server(Base):
__tablename__ = "servers"
id = Column(Integer, primary_key=True)
name = Column(String(256), nullable=False)
address = Column(String(256), nullable=False)
port = Column(Integer)
chain = relationship(
"Server",
secondary="server_chains",
primaryjoin=(id == ServerChain.server_id),
secondaryjoin=(id == ServerChain.chained_server_id),
order_by=ServerChain.seq,
collection_class=ordering_list("seq"),
lazy="joined",
)
Код: Выделить всё
server1.chain = [server2, server3]
assert server1.chain == [server2, server3]
Код: Выделить всё
AttributeError: 'Server' object has no attribute 'seq'
Подробнее здесь: https://stackoverflow.com/questions/791 ... ssociation