I'm trying to do this:
class Foo(Base):
id = Column(Integer, primary_key=True)
class Bar(Foo):
id = Column(Integer, primary_key=True)
class FooBarAssociation(Base):
foo_id = Column(Integer, ForeignKey('foo_table.id'))
bar_id = Column(Integer, ForeignKey('bar_table.id'))
foo = relationship(Foo, backref=...)
bar = relationship(Bar,开发者_StackOverflow社区 backref=...)
...but I get errors like this:
Could not determine join condition between parent/child tables on relationship FooBarAssociation.foo. Specify a 'primaryjoin' expression. If this is a many-to-many relationship, 'secondaryjoin' is needed as well.
I've tried specifying foreign_keys and primary_join-s in the relationship declarations, but all for naught. Help? Is the inheritance of Bar from Foo messing with me?
thanks!
Following should work (exactly what the error tells: missing primaryjoin
):
class FooBarAssociation(Base):
foo_id = Column(Integer, ForeignKey('foo_table.id'), primary_key = True, )
bar_id = Column(Integer, ForeignKey('bar_table.id'), ForeignKey('foo_table.id'), primary_key = True, )
foo = relationship(Foo, backref="bars", primaryjoin=(foo_id==Foo.id))
bar = relationship(Bar, backref="foos", primaryjoin=(bar_id==Bar.id))
As you can see, there are two foreign keys on the bar_id
column. This could be required due to inheritance, or you might remove one. But if you do not store any other information apart of the many-to-many relationship, then you might consider Association Proxy instead.
精彩评论