2015-04-06 59 views
1

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

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

回答

1

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

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

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

+0

工作很好,谢谢。 – tipu