我在SQLAlchemy中有两个基类(以声明方式定义),它们之间具有关系。然后,我将这些基类的每个子类化。当我访问第一个派生类中的关系时,我想“覆盖”类之间的关系以返回第二个派生类的对象。
我已经研究了有关继承的sqlalchemy文档,但是找不到对“覆盖”关系的引用。
class BaseA(db.Model):
type_class = db.Column(db.String)
__mapper_args__ = {
'polymorphic_identity':'base',
'polymorphic_on':type_class
}
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
B_id = db.Column(db.Integer, db.ForeignKey('BaseB.id'))
B = db.relationship('BaseB', uselist=False, foreign_keys='B_id')
class DerivedA(BaseA):
__mapper_args__ = {
'polymorphic_identity':'derived',
}
extra = db.Column(db.String)
class BaseB(db.Model):
type_class = db.Column(db.String)
__mapper_args__ = {
'polymorphic_identity':'base',
'polymorphic_on':type_class
}
id = db.Column(db.Integer, primary_key=True)
location = db.Column(db.String)
class DerivedB(BaseB):
# Polymorphic mapping support
__mapper_args__ = {
'polymorphic_identity':'derived',
}
data = db.Column(db.String)
a = DerivedA()
b = DerivedB()
a.B = b
当我以后尝试从对象a检索B时,我希望得到一个类DerivedB的对象。但是,不仅我没有得到DerivedB类型的对象,而且该代码似乎根本不起作用。我收到一条错误消息:“未定义您未派生的polymorphic_identity。可以做我想做的事情,如果可以,怎么做?