Flask SQLAlchemy中的表(模型)继承
我按照这个问题里的建议去做了,但还是遇到了这个错误:
sqlalchemy.exc.NoForeignKeysError: 找不到 'investment' 和 'real_estate' 之间的外键关系。
模型
class Investment(db.Model):
__tablename__ = 'investment'
__mapper_args__ = {'polymorphic_identity': 'investment'}
id = Column(db.Integer, primary_key=True)
item_name = Column(db.String(64))
investment_type = Column(db.String(32), nullable=False)
__mapper_args__ = {'polymorphic_on': investment_type}
class RealEstate(Investment):
__tablename__ = 'real_estate'
__mapper_args__ = {'polymorphic_identity': 'real_estate'}
id = Column(db.Integer, primary_key=True)
current_balance = Column(db.Float)
我还更新了那个答案中的示例,以符合SQLAlchemy文档中的变化,但错误依然存在。
这里的目标是,我不想让RealEstate继承的属性出现在Investment表里。我希望这些属性能在RealEstate表中继承并保留。
有没有人能帮我看看我漏掉了什么?
1 个回答
4
在房地产(RealEstate)中,id
属性必须是一个外键,指向投资(Investment)。否则,你怎么能说每个房地产都是一种投资呢?
把你的房地产类的定义改成下面这样:
class RealEstate(Investment):
__tablename__ = 'real_estate'
__mapper_args__ = {'polymorphic_identity': 'real_estate'}
# This id below should reference Investment. Hence, define it as foreign key.
id = Column(Integer, ForeignKey('investment.id'), primary_key=True)
current_balance = Column(db.Float)