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?

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.

Reply via email to