2

モデルThingとモデルがありActionます。Thingsとsの間には1対多の関係がありActionます。Actionただし、 (たとえば)BuildActionHealActionおよびをサブクラス化できるようにしたいと思いBloodyStupidActionます。Flask-SQLAlchemyを使用してこれを行い、単一の1対多の関係を維持することは可能ですか?

4

1 に答える 1

2

この問題は、SQLAlchemyのドキュメントの継承構成で説明されています。異なるサブクラスが同じデータベーステーブルを共有する場合は、単一テーブル継承を使用する必要があります。

コード例:

class Thing(db.Model):
    __tablename__ = 'thing'
    id = db.Column(db.Integer, primary_key=True)
    actions = db.relationship('Action', backref=db.backref('thing'))

class Action(db.Model):
    __tablename__ = 'action'
    id = db.Column(db.Integer, primary_key=True)
    thing_id = db.Column(db.Integer, db.ForeignKey('thing.id'))
    discriminator = db.Column('type', db.String(50))
    __mapper_args__ = {'polymorphic_on': discriminator}

class BuildAction(Action):
    __mapper_args__ = {'polymorphic_identity': 'build_action'}
    time_required = db.Column(db.Integer)

の各サブクラスは、親クラスで定義された関係Actionを継承する必要があります。thingこのaction.type列は、テーブルの各行が表すサブクラスアクションを示しています。

于 2012-04-23T15:33:42.050 に答える