Just a little detail... To get the class of a "regular" relationship, I use a class_mapper:
def getClassOfRelationship(cls, name): retval = None mapper = sqlalchemy.orm.class_mapper(cls) try: prop = mapper.get_property(name) if isinstance(prop, sqlalchemy.orm.properties.SynonymProperty): retval = getClassOfRelationship(cls, prop.name) elif isinstance(prop, sqlalchemy.orm.properties.RelationshipProperty): retval = prop.mapper.class_ except ValueError: retval = None return retval But the AssociationProxies don't (seem to) show in the mapper, correct? I can always find a workaround, like "ok, if the attribute is not in the class_mapper, then go to the class and check if it's an AssociationProxy", but I was wondering if there's a better ("cleaner") way. As AssociationProxies don't show in the class_mapper, I'll be getting an exception when I try to get it from the mapper (here: prop = mapper.get_property(name)) If I get an exception, I can go to the class itself (cls parameter), check whether it's an AssociationProxy, and then do what it is described in Michael's solution, but maybe someone knows a cleaner way? Thank you in advance! Thanks in advance! 2011/12/7 Michael Bayer <mike...@zzzcomputing.com>: > > On Dec 7, 2011, at 7:53 PM, Hector Blanco wrote: > >> Hello everyone: >> >> In one of my classes, I am using an associationproxy to provide a list >> in which the same item can be inserted twice. Basically, a product can >> contain "images" (several times the same image). One product can have >> two different lists of "images" (images1 and images2... yep... not >> very creative with the naming here) >> >> Is there a way, given a class Product (or an instance, but preferably a >> class) knowing that Product._images1 (or Product._images2) is going to >> give me "Image"s (er... things of class "Image"). I've been able to do >> that with regular relationships through [relationship].mapper.class_. > > > > associationproxy has an attribute target_class for the "middle" class: > > MyClass.my_association.target_class > > then for the target, 0.7 has "remote_attr". Not in 0.6 but it's just > shorthand for: > > getattr(MyClass.my_association.target_class, self.value_attr) > > but AP doesn't know what type that is. Suppose it were a relationship, then > you'd say: > > getattr(MyClass.my_association.target_class, > MyClass.my_association.value_attr).property.class_ > > if a column: > > getattr(MyClass.my_association.target_class, > MyClass.my_association.value_attr).property.columns[0] > > etc. > > > -- > 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.