我试图在flask / sqlalchemy中创建一对多的多态关系。该概念是使用授权表为某些数据提供临时性。该表将有两个字段,authorizable_id和authorizable_type。 authorizable_id引用它所引用的条目的id。它不是外键,因为它可以引用不同的表。 authorizable_type确定它引用的表。例如,对于文件,它是'FILE'。
我已经看过如何做类似的事情,但sqlalchemy文档对字段的作用非常隐含。另外,它们要求被引用的表(这里是File)具有id,该id是引用保存关系的表的外键(discriminator / id)。我正在做相反的事情,其中多态关系持有资产的id。我希望sqlalchemy有一个像“polymorphic_field”这样的值,你可以在其中指出哪个字段名称。我已添加以下代码。任何指导都非常感谢。谢谢!
class AuthorizableInterface(Model):
__mapper_args__ = {
'polymorphic_identity':'AUTHORIZABLE',
}
class Authorization(Model):
__tablename__ = 'authorizations'
token = Column(String(254), nullable=False)
...
authorizable_id = Column(Integer(), ForeignKey(AuthorizableInterface.id))
authorizable_type = Column(String(254), nullable=False)
__mapper_args__ = {
'polymorphic_on': authorizable_type,
'polymorphic_field' 'authorizable_id' // not a real thing, what i want to do
}
class File(AuthorizableInterface):
__tablename__ = 'files'
url = Column(Text(1024), nullable=False)
provider_id = Column(Integer(), ForeignKey('file_providers.id'))
__mapper_args__ = {
'polymorphic_identity':'FILE'
}
class AnotherAuthorizableThing(AuthorizableInterface):
...
__mapper_args__ = {
'polymorphic_identity':'THING'
}