永久筛选SQLAlchemy关系



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

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

通过指定primaryjoin来更改关系的联接条件。

groups = relationship(
    Group, GroupMemeber.__table__,
    primaryjoin=lambda: and_(not_(Group.deleted), GroupMemeber.user_id == User.id)
)

请注意,这不会阻止您将已删除的组添加到成员中。SQLAlchemy不知道primaryjoin在做什么,它只知道模型之间的基本关系。当primaryjoin条件不再成立时,SQLAlchemy也不会删除关联。为了查看与成员关联的组的实际集合,建立第二个all_groups关系将非常有用。

最新更新