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 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.
> 

-- 
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