can you throw in the actual operations that fail in your test and I'll just run it ? thanks.
On Mar 16, 2011, at 4:15 PM, Eric Ongerth wrote: > I hope this makes sense, what I'm trying to do here. My naive first > try at it was to just see if I could have the desired backref()s on > either the A or C class, and manage to have the relationship go > through the associationproxy. Probably I should be thinking of a > technical reason why we would not expect that to work. So then I > thought maybe the backrefs just need to be on the relationships > defined on the B class. The above post was my third try, where I > attempted to just make the whole setup symmetrical between A and C. > > > On Mar 14, 4:44 pm, Eric Ongerth <ericonge...@gmail.com> wrote: >> from sqlalchemy import Unicode, Integer, Column, create_engine, >> ForeignKey >> from sqlalchemy.orm import relationship, Session >> from sqlalchemy.orm.collections import MappedCollection >> from sqlalchemy.ext.declarative import declarative_base >> from sqlalchemy.ext.associationproxy import association_proxy >> import operator >> >> class Base(object): >> id = Column(Integer, primary_key=True) >> >> Base = declarative_base(cls=Base) >> >> def _create_c_by_value(value): >> return C(value) >> >> def _create_a_by_value(value): >> return A(value) >> >> class A(Base): >> __tablename__ = "a" >> id = Column(Integer, primary_key=True) >> value = Column(Unicode) >> associations = relationship("B", cascade="all") >> c_values = association_proxy("associations", "c_val", >> creator=_create_c_by_value) >> >> def __init__(self, val): >> self.value = val >> >> def __repr__(self): >> return('<A>(%s)' % self.value) >> >> class B(Base): >> __tablename__ = "b" >> a_id = Column(Integer, ForeignKey("a.id"), nullable=False) >> c_id = Column(Integer, ForeignKey("c.id"), nullable=False) >> c_elements = relationship("C", cascade="all") >> c_val = association_proxy("c_elements", "value") >> a_elements = relationship("A", cascade="all") >> a_val = association_proxy("a_elements", "value") >> >> class C(Base): >> __tablename__ = "c" >> id = Column(Integer, primary_key=True) >> c_value = Column(Unicode) >> associations = relationship("B", cascade="all") >> a_values = association_proxy("associations", "a_val", >> creator=_create_a_by_value) >> >> def __init__(self, val): >> self.value = val >> >> def __repr__(self): >> return('<C>(%s)' % self.value) >> >> if __name__ == "__main__": >> >> engine = create_engine('sqlite://', echo=True) >> Base.metadata.create_all(engine) >> session = Session(engine) >> >> Ok, running this sets up an example environment then you can >> experiment. Try creating some As and relating them to some Cs. I'm >> getting a bunch of different errors doing this. What am I doing wrong >> or overlooking? >> >> The core of my inquiry is this: would this be the way to make two-way >> relationships between two classes (two classes which have a many:many >> relationship between them) work correctly when tunneled through an >> associationproxy to hide the association object class between them? > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalchemy@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 sqlalchemy@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.