我有一个通过GroupMember关联模型属于多个组的用户模型。我使用软删除,因此目前user.groups
可以包含已删除的组。是否有可以应用于关系的永久过滤器,因此它不包含已删除的实例?
class User(Base):
# ...
groups = relationship(
'group',
secondary=GroupMember.__table__,
order_by=GroupMember.position
)
答案 0 :(得分:1)
通过指定primaryjoin
来更改关系的连接条件。
groups = relationship(
Group, GroupMemeber.__table__,
primaryjoin=lambda: and_(not_(Group.deleted), GroupMemeber.user_id == User.id)
)
请注意,这并不妨碍您将已删除的群组添加到成员中。 SQLAlchemy不知道primaryjoin
正在做什么,它只知道模型之间的基本关系。当primaryjoin
条件不再成立时,SQLAlchemy也不会删除关联。要查看与成员关联的实际组合,最好有第二个all_groups
关系。