Here is the whole Contact and ContactRelation model
class Contact(db.Model):
    __tablename__ = 'contact'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Unicode(120), nullable=False, unique=False)
    created_on = db.Column(db.DateTime, default=datetime.utcnow)
    birthday = db.Column(db.DateTime)
    background = db.Column(db.Text)
    photo = db.Column(db.Unicode(120))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    to_contacts = db.relationship('Contact',
           secondary='contactrelation',
           primaryjoin=id== 'contactrelation.c.from_contact_id',
           secondaryjoin=id== 'contactrelation.c.to_contact_id',
           backref = 'from_contacts')

class ContactRelation(db.Model):
    __tablename__ = 'contactrelation'
    id = db.Column(db.Integer, primary_key=True)
    from_contact_id = db.Column(db.Integer, db.ForeignKey('contact.id'))
    to_contact_id = db.Column(db.Integer, db.ForeignKey('contact.id'))
    relation_type = db.Column(db.String(100), nullable=True)


Thanks,

Mohammad Reza


On Wed, Sep 24, 2014 at 2:38 PM, Simon King <si...@simonking.org.uk> wrote:

> Could you show the whole model and table definition? I've lost track
> of exactly what you've written.
>
> Thanks,
>
> Simon
>
> On Wed, Sep 24, 2014 at 11:15 AM, Mohammad Reza Kamalifard
> <mr.kamalif...@gmail.com> wrote:
> > thanks Mike
> > with new to_contacts relationship i have new error
> > ArgumentError: Could not locate any relevant foreign key columns for
> primary
> > join condition 'contact.id = :param_1' on relationship
> Contact.to_contacts.
> > Ensure that referencing columns are associated with a ForeignKey or
> > ForeignKeyConstraint, or are annotated in the join condition with the
> > foreign() annotation.
> >
> > On Wed, Sep 24, 2014 at 5:49 AM, Michael Bayer <mike...@zzzcomputing.com
> >
> > wrote:
> >>
> >> to_contacts = db.relationship('Contact',
> >>            secondary='contactrelation',
> >>            primaryjoin='id== ContactRelation.from_contact_id',
> >>            secondaryjoin='id== ContactRelation.to_contact_id',
> >>
> >> or
> >>
> >> to_contacts = db.relationship('Contact',
> >>            secondary=contactrelation,
> >>            primaryjoin=id== contactrelation.c.from_contact_id,
> >>            secondaryjoin=id== contactrelation.c.to_contact_id,
> >>
> >> see examples:
> >>
> >>
> >>
> http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html#self-referential-many-to-many-relationship
> >>
> >>
> >>
> >>
> >> On Sep 23, 2014, at 5:26 PM, Mohammad Reza Kamalifard
> >> <mr.kamalif...@gmail.com> wrote:
> >>
> >> Using contactrelation.from_contact_id ?
> >> I have AttributeError: 'Table' object has no attribute 'from_contact_id'
> >> Error.
> >>
> >> On Tue, Sep 23, 2014 at 4:48 PM, Michael Bayer <
> mike...@zzzcomputing.com>
> >> wrote:
> >> >
> >> > table name, not class name, please see
> >> >
> http://docs.sqlalchemy.org/en/rel_0_9/orm/extensions/declarative.html#declarative-many-to-many
> >> >
> >> >
> >> > On Sep 23, 2014, at 8:33 AM, Mohammad Reza Kamalifard
> >> > <mr.kamalif...@gmail.com> wrote:
> >> >
> >> > In my application with SQLAlchemy i need to create many to many
> >> > relationship between two contact object also sotre data for each of
> >> > relatioship here is my Contact model
> >> >
> >> > class Contact(db.Model):
> >> >     __tablename__ = 'contact'
> >> >     id = db.Column(db.Integer, primary_key=True)
> >> >     name = db.Column(db.Unicode(120), nullable=False, unique=False)
> >> >     user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
> >> >
> >> >     to_contacts = db.relationship('Contact',
> >> >                                   secondary='ContactRelation',
> >> >                                   primaryjoin='id==
> >> > ContactRelation.from_contact_id',
> >> >                                   secondaryjoin='id==
> >> > ContactRelation.to_contact_id',
> >> >
> >> >                                   backref='from_contacts')
> >> >
> >> >
> >> > and my association class ContactRelation:
> >> >
> >> > class ContactRelation(db.Model):
> >> >     __tablename__ = 'contactrelation'
> >> >     id = db.Column(db.Integer, primary_key=True)
> >> >     from_contact_id = db.Column(db.Integer, db.ForeignKey('contact.id
> '))
> >> >     to_contact_id = db.Column(db.Integer, db.ForeignKey('contact.id
> '))
> >> >     relation_type = db.Column(db.String(100), nullable=True)
> >> >
> >> > every thing seems good but i have error :
> >> > AttributeError: type object 'ContactRelation' has no attribute 'c'
> >> >
> >> >
> >> >
> >> >
> >> > --
> >> > You received this message because you are subscribed to the Google
> >> > Groups "sqlalchemy" group.
> >> > To unsubscribe from this group and stop receiving emails from it, send
> >> > an email to sqlalchemy+unsubscr...@googlegroups.com.
> >> > To post to this group, send email to sqlalchemy@googlegroups.com.
> >> > Visit this group at http://groups.google.com/group/sqlalchemy.
> >> > For more options, visit https://groups.google.com/d/optout.
> >> >
> >> >
> >> > --
> >> > You received this message because you are subscribed to a topic in the
> >> > Google Groups "sqlalchemy" group.
> >> > To unsubscribe from this topic, visit
> >> > https://groups.google.com/d/topic/sqlalchemy/OeLrx74p5vY/unsubscribe.
> >> > To unsubscribe from this group and all its topics, send an email to
> >> > sqlalchemy+unsubscr...@googlegroups.com.
> >> > To post to this group, send email to sqlalchemy@googlegroups.com.
> >> > Visit this group at http://groups.google.com/group/sqlalchemy.
> >> > For more options, visit https://groups.google.com/d/optout.
> >>
> >> --
> >> You received this message because you are subscribed to the Google
> Groups
> >> "sqlalchemy" group.
> >> To unsubscribe from this group and stop receiving emails from it, send
> an
> >> email to sqlalchemy+unsubscr...@googlegroups.com.
> >> To post to this group, send email to sqlalchemy@googlegroups.com.
> >> Visit this group at http://groups.google.com/group/sqlalchemy.
> >> For more options, visit https://groups.google.com/d/optout.
> >>
> >>
> >> --
> >> You received this message because you are subscribed to a topic in the
> >> Google Groups "sqlalchemy" group.
> >> To unsubscribe from this topic, visit
> >> https://groups.google.com/d/topic/sqlalchemy/OeLrx74p5vY/unsubscribe.
> >> To unsubscribe from this group and all its topics, send an email to
> >> sqlalchemy+unsubscr...@googlegroups.com.
> >> To post to this group, send email to sqlalchemy@googlegroups.com.
> >> Visit this group at http://groups.google.com/group/sqlalchemy.
> >> For more options, visit https://groups.google.com/d/optout.
> >
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> > "sqlalchemy" group.
> > To unsubscribe from this group and stop receiving emails from it, send an
> > email to sqlalchemy+unsubscr...@googlegroups.com.
> > To post to this group, send email to sqlalchemy@googlegroups.com.
> > Visit this group at http://groups.google.com/group/sqlalchemy.
> > For more options, visit https://groups.google.com/d/optout.
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "sqlalchemy" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/sqlalchemy/OeLrx74p5vY/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to