У меня есть следующие основные модель SQLAlchemy с многим ко многие ссылки себя:SQLAlchemy самоссылающихся многих ко многим с дополнительными данными об ассоциации
class Organisation(Base):
__tablename__ = 'organisation'
name = Column(String(50))
url = Column(String(128))
associated = relationship(
'Organisation',
secondary="organisation_map",
primaryjoin="Organisation.id==organisation_map.c.organisation_id",
secondaryjoin="Organisation.id==organisation_map.c.assoc_organisation_id",
backref="account_organisation"
)
В таблице ассоциации выглядит следующим образом:
class OrganisationMap(Base):
__tablename__ = 'organisation_map'
organisation_id = Column(Integer, ForeignKey('organisation.id'))
assoc_organisation_id = Column(Integer, ForeignKey('organisation.id'))
is_customer = Column(Boolean, default=False)
is_supplier = Column(Boolean, default=False)
Таблица ассоциации содержит дополнительные данные, is_customer
и is_supplier
, которые я хочу получить от самой модели, например:
class Organisation(Base):
...
def get_suppliers(self):
pass
def get_customers(self):
pass
На данный момент у меня нет никакого способа получения такого списка без первого запроса на объединении таблицы, OrganisationMap
, получая идентификаторов из «клиентов» или «поставщики», а затем запрашивая Organisation
таблицу со списком идентификаторов.
Возможно ли это?
См. [Этот вопрос] (http://stackoverflow.com/questions/7417906/sqlalchemy-manytomany-secondary-table-with-additional-fields). Самореферентная часть должна требовать только номинальных изменений конфигурации. – univerio