the legal way is the association_proxy and family.
here another shorter ... a hack:

i did have similar need - obj.somerelation.append( left=.., right=..),
 
so i did monkeypatch the InstrumentedList's append to use the item 
returned from collection's append - 

        def append( self, *args, **kwargs):
            item = self._data_appender( *args,**kwargs)
            self._InstrumentedList__setrecord( item)    
                  #private __setrecord; was _before_ _data_appender
        sqlalchemy.orm.attributes.InstrumentedList.append = append

and use my own collection which creates the association object from 
append's keywordargs, then factory for it and give that to 
collection_class= of relation()

class Association:
    'base for all assoc_klas'
    class MyCollection( list):
        factory = None
        def append( me, obj =_Relation, **kargs):
            if obj is _Relation:    #just marker for notset
                obj = me.factory( **kargs)
            list.append( me, obj)
            return obj

    @classmethod
    def myCollectionFactory( klas):
        m = Association.MyCollection()
        m.factory = klas        #the assoc-obj-type
        return m

....
....
    mapper ( ... relation( ....
            collection_class = assoc_klas.myCollectionFactory
        ) )

---------------------------

u'll have to do it over __setitem__.
have fun.
svil

On Tuesday 12 June 2007 21:26:52 Ron wrote:
> I have an object that has a relation to an Attributes table.  The
> Attributes table is just key/value pairs with a pointer to the
> object in the main table.
>
> I'd like to make the use of my object very simple by exposing these
> object attributes as a dictionary.
>
> So, I'd like to be able to do this:
>
> obj.attrs['foo'] = 'a'
>
> instead of
>
> obj.attrs.append(Attribute('foo', 'a'))
>
> The documentation has an example for using the collection_class
> argument to relation() but in order to make things actually work as
> above I think I'd need to override __setitem__ but that sqlalchemy
> doesn't seem to let me do that.
>
> What am I missing?
>
> -Ron
>
>
> 


--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to