永久过滤SQLAlchemy关系

时间:2015-04-06 16:18:53

标签: python sqlalchemy

我有一个通过GroupMember关联模型属于多个组的用户模型。我使用软删除,因此目前user.groups可以包含已删除的组。是否有可以应用于关系的永久过滤器,因此它不包含已删除的实例?

class User(Base):
    # ...
    groups = relationship(
        'group',
        secondary=GroupMember.__table__,
        order_by=GroupMember.position
    )

1 个答案:

答案 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关系。