【问题标题】:One-to-many relationship to multiple models与多个模型的一对多关系
【发布时间】:2012-04-23 00:20:30
【问题描述】:

我有一个模型Thing 和一个模型ActionThings 和 Actions 之间存在一对多的关系。但是,我希望能够将Action 子类化为(例如)BuildActionHealActionBloodyStupidAction。是否可以使用 Flask-SQLAlchemy 来做到这一点并保持单一的一对多关系?

【问题讨论】:

    标签: python sqlalchemy flask flask-sqlalchemy


    【解决方案1】:

    此问题在 SQLAlchemy 文档中的Inheritance Configuration 下进行了描述。如果你的不同子类共享同一个数据库表,你应该使用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 列描述了表中每一行代表的子类操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      相关资源
      最近更新 更多