永久过滤 SQLAlchemy 关系
Permanently filter a SQLAlchemy relationship
我有一个通过 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
关系会很有用。
我有一个通过 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
关系会很有用。