我试图在单表继承情况下创建一个 backref,其中一个子类对象有一个声明关系(HasFooMixin)的 mixin,但这会导致以下问题:
sqlalchemy.exc.ArgumentError: Error creating backref 'bar' on relationship 'ImplementedBase.foos': property of that name exists on mapper 'mapped class Foo->foos'
我想也许在其他地方使用了“bar”这个名字,但不管我给它起什么名字,都会产生同样的错误。该错误似乎是由于已经有一个具有该名称的 backref,但是我在所有代码库中都找不到任何内容,并且无论我将其命名为什么,它都会引发相同的错误。知道如何解决这个问题吗?基本上我想要一个来自 bar --> foos 和来自 foo --> bar 的双向引用,(但如果可能,仅适用于多态类 ImplementedBase)
以下是模型详细信息。
def BaseClass(db.Model):
type = db.Column(db.Text, default="base")
...
__mapper_args__ = {
'polymorphic_identity' : 'base',
'polymorphic_on' : type
}
def ImplementedBase(BaseClass, HasFooMixin):
__mapper_args__ = {
'polymorphic_identity': 'implementedbase'
}
def HasFooMixin(object):
@declared_attr
def foos(cls)
return cls.__table__.c.get('foos', db.relationship('Foo', secondary=mtm_foo_bar, backref="bar"))
#Table for MTM mapping Foo <---> Bar
mtm_foo_bar = db.Table('associate_foo_bar',
db.Model.metadata,
db.Column("foo_id", db.Integer, db.ForeignKey("foo.id")),
db.Column("bar_id", db.Integer, db.ForeignKey("bar.id"))
)