我有一個應用程序具有「BaseVisibilizer」類的對象的關係也就是基地 用於其它兩個類的類:SQLAlchemy的:獲取某些類型的實例中,它可以包含多種類型的
class BaseVisibilizer(declarativeBase):
__tablename__ = "base_visibilizers"
_polymorphicIdentity = Column("polymorphic_identity", String(20), key="polymorphicIdentity")
__mapper_args__ = {
'polymorphic_on': _polymorphicIdentity,
'polymorphic_identity': None
}
def __init__(self):
super(BaseVisibilizer, self).__init__()
這是我的User和UserGroup類的基類:可以使用 這兩個類來控制某些項目的可見性。
class UserGroup(BaseVisibilizer.BaseVisibilizer):
__tablename__ = "user_groups"
_id = Column("id", Integer, ForeignKey(BaseVisibilizer.BaseVisibilizer.id), primary_key=True)
__mapper_args__ = {
'polymorphic_identity': 'UserGroup',
'inherit_condition': _id == BaseVisibilizer.BaseVisibilizer._id,
}
_name = Column("name", String(50), nullable=False)
class User(BaseVisibilizer.BaseVisibilizer):
__tablename__ = "users"
_id = Column("id", Integer, ForeignKey(BaseVisibilizer.BaseVisibilizer.id), primary_key=True)
__mapper_args__ = {
'polymorphic_identity': 'User',
'inherit_condition': _id == BaseVisibilizer.BaseVisibilizer._id,
}
_firstName = Column("first_name", String(50), key="fistName")
_lastName = Column("last_name", String(50), key="lastName")
_userName = Column("user_name", String(50), unique=True, nullable=False)
在許多其他類我的系統中的我的關係是 可以包含 「BaseVisibilizers」(用戶或用戶組)。
class Whatever(declarativeBase):
allowedVisibilizers = relationship("BaseVisibilizer",
secondary="intermediate_whatevers_to_base_visibilizers",
collection_class=set)
所以不管的情況下,allowedVisibilizers集可以 包含用戶組的用戶的情況下(因爲兩者都是 BaseVisibilizers)。如果記錄的用戶或登錄用戶 所屬的用戶組屬於「allowedVisibilizers」中,那麼該用戶將能夠 訪問(或「查看」)無論哪個實例。
在某一點上,我想創造的無論 類的方法,這將使我只允許visibilizers是 實際上(丟棄用戶)一個用戶組的,但我一直沒能 做它。
我已經試過幾件事情,但很明顯,不正確的 (子查詢,「allowedvisibilizers」的加入...):
What I'd like is something like:
class Whatever(declarativeBase):
[ . . . ]
def getAllowedUserGroups(self):
session = Database.Session()
query = session.query(UserGroup.UserGroup).filter(UserGroup.UserGroup.in_(self.allowedVisibilizers))
return query.all()
(但顯然,用戶組是一個類,並沒有按」噸有一個IN_)
當然,我總是可以得到所有的「allowedVisibilizers」,並從返回的值刪除 的用戶,但我試圖使它比優化的 點點,避免不必要的調用數據庫 。
任何提示將非常感激。先謝謝你!