[英]SQLAlchemy adjacency list relationship with declared attributes
I have a Top level model declaration that is inherited by different types of children 我有一个由不同类型的子代继承的顶级模型声明
class HasId(object):
@declared_attr
def id(cls):
return Column('id', Integer, Sequence('test_id_seq'), primary_key=True)
...
@declared_attr
def triggered_by_id(cls):
return Column(Integer, ForeignKey('tests.id'), nullable=True)
@declared_attr
def triggered(cls):
return relationship('TestParent',
foreign_keys='TestParent.triggered_by_id',
lazy='joined',
cascade='save-update, merge, delete, delete-orphan',
backref=backref('triggered_by', remote_side=[id])
)
class TestParent(HasId, Model):
__tablename__ = 'tests'
discriminator = Column(String(50))
__mapper_args__ = {'polymorphic_on': discriminator}
class FooTest(TestParent):
__tablename__ = 'footests'
__mapper_args__ = {'polymorphic_identity': 'footests'}
id = Column(Integer, ForeignKey('tests.id'), primary_key=True)
bar = Column(Boolean)
...
When IO try to build this database, I get an error caused by how I have defined the remote_side
of the backref
on the triggered_by
relationship. 当IO尝试构建此数据库时,我收到一个错误,该错误是由于我如何在
backref
关系上定义backref
的remote_side
triggered_by
。
The full error is 完整的错误是
ArgumentError: Column-based expression object expected for argument 'remote_side'; got: '<built-in function id>', type <type 'builtin_function_or_method'>
The solution is to change the backref
definition from 解决方案是将
backref
定义从
backref('triggered', remote_side=[id])
to 至
backref('triggered', remote_side='TestParent.id')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.