Flask/Sqlaclemy:如何进行一对多多态继承

2024-10-04 05:24:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在flask/sqlalchemy中创建一对多多态关系。其概念是使用授权表为某些数据提供临时数据。该表有两个字段,authorizable_id和authorizable_type。可授权的\u id引用它所引用的条目的id。它不是外键,因为它可以引用不同的表。authorizable_类型确定它引用的是哪个表。例如,对于文件,它是“file”。在

我已经看到了如何做类似的事情,但是sqlalchemy文档对于字段的角色是相当含蓄的。此外,它们还要求被引用的表(这里是文件)具有一个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'
    }

Tags: idfalsesqlalchemy关系typeargscolumnidentity