2015-04-06 55 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