Либо определите primaryjoin
или secondaryjoin
с дополнительным предикатом, либо используйте производную таблицу в качестве вторичной.
Используя производную таблицу:
worksAt = relationship(
'Address',
secondary=lambda:
PersonAddressRelationship.__table__.select().
where(PersonAddressRelationship.relation == Relationships.worker).
alias(),
viewonly=True)
Использование primaryjoin
:
manages = relationship(
'Address', secondary='parelationship',
primaryjoin=lambda:
and_(Person.id == PersonAddressRelationship.personId,
PersonAddressRelationship.relation == Relationships.manager),
viewonly=True)
Использование secondaryjoin
:
resides = relationship(
'Address', secondary='parelationship',
secondaryjoin=lambda:
and_(Address.id == PersonAddressRelationship.adressID,
PersonAddressRelationship.relation == Relationships.manager),
viewonly=True)
Обратите внимание, что во всех примерах выражение передается как вызываемое(лямбда), так что его можно лениво оценивать во время настройки картографа.