2012-04-23 17 views
2

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

答えて

2

この問題はInheritance Configuration下SQLAlchemyのドキュメントに記述されています。あなたの異なったサブクラスが同じデータベーステーブルを共有する場合は、single table inheritanceを使用する必要があります。

コード例:

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列には、表の各行が表すサブクラスのアクションが記述されています。