On 7/6/15 12:06 PM, Ryan Holmes wrote:
I have an interesting problem that I haven't been able to solve for quite some time. I keep finding information about association proxies and the like, but nothing that really helps (or maybe I'm implementing it incorrectly).

Let's start with this:

|
classHandledProjectedItemList(list):
defappend(self,proj):
            proj.projected =True
            list.append(self,proj)


    item_table =Table("items",saveddata_meta,
Column("ID",Integer,primary_key =True),
Column("itemID",Integer,nullable =False,index =True),
Column("name",String,nullable =False),
Column("timestamp",Integer,nullable =False),
)

    projectedItem_table =Table("projectedItem",saveddata_meta,
Column("sourceID",ForeignKey("item.ID"),primary_key =True),
Column("destID",ForeignKey("item.ID"),primary_key =True),
Column("enabled",Integer))

    mapper(Item,item_table,
        properties ={"projectedItem":relation(Item,
primaryjoin =projectedItem_table.c.destID ==item_table.c.ID, secondaryjoin =item_table.c.ID ==projectedItem_table.c.sourceID,
                        secondary =projectedItem_table,
                        collection_class =HandledProjectedItemList)
})
|


I have two tables: a `item` table, and a `projectedItem` table. The `item` table is the main one, and contains information on items. The projected items table is a self-referential many-to-many relationship to the items table, where each item may have a collection of other items attached to it. We use a custom collection class to load this relationship so that we can modify a special attribute in the Item objects (if they are loaded via this relationship, they have their `projected` attribute set to `True`).

This works great. But I also want read / write access to that extra `enabled` column in the relationship table, while maintaining the current functionality of loading the projected items into this custom collection class. I haven't found any information on that that helps, or like I said before, maybe I'm just not using it correctly.
you would make a new class ProjectedItem and map it to the projectedItem_table. This is the association object pattern (get that to work first, without the "proxy" part), illustrated at http://docs.sqlalchemy.org/en/rel_1_0/orm/basic_relationships.html#association-object. Once that works, and all that's left is the inconvenience of navigating from Item->projecteditems->item, then you can apply the association proxy pattern to convert those two hops into just one (http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/associationproxy.html).



--
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 [email protected] <mailto:[email protected]>. To post to this group, send email to [email protected] <mailto:[email protected]>.
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to