"many" 属于不同子类的多态一对多关系

Polymorphic one-to-many relationship where "many" are of different subclasses

我有一个 Player class 并且每个玩家拥有 X 数量的 Character 个实例:

class Player(Model):
    characters = relationship('Character', back_populates='owner')

class Character(Model):
    owner = relationship('Player', back_populates='characters')
    owner_id = Column('player_id', Integer, ForeignKey('player.id'))
    level = Column(Integer, default=0)

但现在我想用 __abstract__ 使 Character 成为基础 class,并且只将其子class 实例记录到数据库中:

class Character(Model):
    __abstract__ = True
    owner = relationship('Player', back_populates='characters')
    owner_id = Column('player_id', Integer, ForeignKey('player.id'))
    level = Column(Integer, default=0)

    def use_special_ability(self, target):
        raise NotImplementedError

class Warrior(Character):
    def use_special_ability(self, target):
        bla_bla(target)

class Mage(Character):
    def use_special_ability(self, target):
        foo(self.level, bar=True)

是否只有一个 character table 或所有字符子 class 都有自己的 table 对我来说并不重要(尽管前者略微优先),只要 Python 方有效 "flawlessly",即每个玩家都有 一个 角色列表,无论其类型如何。

我该如何改变这种关系,使其适用于多个像这样的子class?

这是一个例子:

class Player(Model):
    __tablename__ = "player"

    characters = relationship('Character', back_populates='owner')


class Character(Model):
    __tablename__ = "character"

    id = Column(Integer, primary_key=True)
    type = Column(Enum("warrior", "mage")), nullable=False)
    owner = relationship('Player', back_populates='characters')
    owner_id = Column('player_id', Integer, ForeignKey('player.id'))

    __mapper_args__ = {
        "polymorphic_on": type,
    }

    ...


class Warrior(Character):
    __tablename__ = None

    __mapper_args__ = {
        "polymorphic_identity": "warrior",
    }

    ...


class Mage(Character):
    __tablename__ = None

    __mapper_args__ = {
        "polymorphic_identity": "mage",
    }

    ...