On Aug 12, 2010, at 5:43 PM, Alvaro Reinoso wrote: > I'm trying that, but I got different error: > > "Could not determine relationship direction for primaryjoin condition > 'users.id = :id_1', on relationship User.mediaGroups. Specify the > 'foreign_keys' argument to indicate which columns on the relationship > are foreign." > > As I can see, the error is related to the users table which I don't > use in this class. However, user table is related to media_groups. > This is the user's table: > > class User(rdb.Model): > """Represents the user""" > rdb.metadata(metadata) > rdb.tablename("users") > > id = Column("id", Integer, primary_key=True) > name = Column("name", String(50)) > email = Column("email", String(50)) > > channels = relationship(Channel, secondary=user_channels, > order_by=Channel.titleView, backref="users") > mediaGroups = relationship(MediaGroup, secondary=user_media_groups, > order_by=MediaGroup.title, backref="users") > > Do I need to add something else to that table?
user_media_groups needs to have a ForeignKey that points to "users". > > Thanks!!! > > > > On Aug 12, 5:15 pm, Michael Bayer <mike...@zzzcomputing.com> wrote: >> On Aug 12, 2010, at 5:09 PM, Michael Bayer wrote: >> >> >> >> >> >>> On Aug 12, 2010, at 4:58 PM, Alvaro Reinoso wrote: >> >>>> I'm still working on the solution. I've found out some stuff in >>>> internet. I guess I'm close to, but I haven't got it yet. I'm using >>>> this for the relation: >> >>>> mediaGroups = relationship("MediaGroup", >>>> secondary=media_group_groups, order_by="MediaGroup.title", >>>> backref='media_groups', foreign_keys = >>>> ["media_group_groups.groupA_id", "media_group_groups.groupB_id"], >>>> primaryjoin = "MediaGroup.id == >>>> media_group_groups.groupA_id", >>>> secondaryjoin = "MediaGroup.id == media_group_groups.groupB_id") >> >>>> I'm playing with the parameters, but I usually get this error: >> >>>> "ArgumentError: Could not determine relationship direction for >>>> primaryjoin condition 'users.id = :id_1', on relationship >>>> User.mediaGroups. Specify the 'foreign_keys' argument to indicate >>>> which columns on the relationship are foreign." >> >>> "media_group_groups" is not available when "primaryjoin" is evaluated as a >>> string, nor within "foreign_keys" which is not necessary here since your >>> meta_group_groups already has ForeignKey objects on it, so use a non-string >>> format for primaryjoin. i will add additional examples to the declarative >>> docs. >> >> scratch part of that, tablenames are available in the string eval as long as >> they're from the same MetaData: >> >> mediaGroup = relationship("MediaGroup", >> >> secondary=media_group_groups, order_by="MediaGroup.title", >> backref="media_groups", >> primaryjoin="MediaGroup.id==media_group_groups.c.groupA_id", >> secondaryjoin="MediaGroup.id==media_group_groups.c.groupB_id" >> >> also the error for the exampe you have above should be "'Table' object has >> no attribute 'groupA_id'". >> >> >> >>>> Thank you! >> >>>> On Aug 12, 1:08 pm, Alvaro Reinoso <alvrein...@gmail.com> wrote: >>>>> Hello, >> >>>>> I'm trying to link one table to itself. I have media groups which can >>>>> contain more media group. I created a relation many to many: >> >>>>> media_group_groups = Table( >>>>> "media_group_groups", >>>>> metadata, >>>>> Column("groupA_id", Integer, >>>>> ForeignKey("media_groups.id")), >>>>> Column("groupB_id", Integer, >>>>> ForeignKey("media_groups.id")) >>>>> ) >> >>>>> class MediaGroup(rdb.Model): >>>>> """Represents MediaGroup class. Conteins channels and other media >>>>> groups""" >>>>> rdb.metadata(metadata) >>>>> rdb.tablename("media_groups") >> >>>>> id = Column("id", Integer, primary_key=True) >>>>> title = Column("title", String(100)) >>>>> parents = Column("parents", String(512)) >> >>>>> channels = relationship(Channel, secondary=media_group_channels, >>>>> order_by=Channel.titleView, backref="media_groups") >>>>> mediaGroup = relationship("MediaGroup", >>>>> secondary=media_group_groups, order_by="MediaGroup.title", >>>>> backref="media_groups") >> >>>>> I got this error: >> >>>>> "ArgumentError: Could not determine join condition between parent/ >>>>> child tables on relationship MediaGroup.mediaGroup. Specify a >>>>> 'primaryjoin' expression. If this is a many-to-many relationship, >>>>> 'secondaryjoin' is needed as well." >> >>>>> When I create the tables I don't get any error, it's just when I add >>>>> any element to it. >>>>> Any idea??? >> >>>>> Thanks in advance! >> >>>> -- >>>> You received this message because you are subscribed to the Google Groups >>>> "sqlalchemy" group. >>>> To post to this group, send email to sqlalch...@googlegroups.com. >>>> To unsubscribe from this group, send email to >>>> sqlalchemy+unsubscr...@googlegroups.com. >>>> For more options, visit this group >>>> athttp://groups.google.com/group/sqlalchemy?hl=en. >> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "sqlalchemy" group. >>> To post to this group, send email to sqlalch...@googlegroups.com. >>> To unsubscribe from this group, send email to >>> sqlalchemy+unsubscr...@googlegroups.com. >>> For more options, visit this group >>> athttp://groups.google.com/group/sqlalchemy?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalch...@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.