Hi all,

I've been trying to get the "grandchildren" relationship working in
the code below, but have just about run out of permutations to try.  I
couldn't get much out of the docs, and the archives turned up a few
similar queries but none with an answer.  Is this even possible?  Is
there a better way to accomplish this result (the collection of
related Grandchild objects accessible from an instance of Parent)?

class Parent(Base):
    __tablename__ = 'parents'

    id = Column(Integer, primary_key=True)

    # this works of course
    children = relationship('Child', backref='parent')

    # but this doesn't
    grandchildren = relationship("Grandchild",
        primaryjoin="and_(Grandchild.childs_id==Child.id,\
        Child.parents_id==Parent.id)",
        foreign_keys=['Grandchild.childs_id','Child.parents_id'])

class Child(Base):
    __tablename__ = 'childs'

    id = Column(Integer, primary_key=True)
    parents_id = Column(Integer, ForeignKey("parents.id"))

class Grandchild(Base):
    __tablename__ = 'grandchilds'

    id = Column(Integer, primary_key=True)
    childs_id = Column(Integer, ForeignKey("childs.id"))

This throws an exception:
InvalidRequestError: One or more mappers failed to compile. Exception
was probably suppressed within a hasattr() call. Message was: Could
not determine relationship direction for primaryjoin condition
'grandchilds.childs_id = childs.id AND childs.parents_id =
parents.id', on relationship Parent.grandchildren. Specify the
'foreign_keys' argument to indicate which columns on the relationship
are foreign.

Thanks for any help,
Anders

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to