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