我有一个模型Thing
和一个模型Action
。Thing
s 和Action
s之间存在一对多的关系。但是,我希望能够继承Action
(例如BuildAction
)HealAction
和BloodyStupidAction
. 是否可以使用 Flask-SQLAlchemy 来执行此操作并维护单个一对多关系?
问问题
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 回答