Aha! This worked perfectly. I followed your create_instance() example at 
http://techspot.zzzeek.org/?p=4

I definitely owe you a beer!

Michael Bayer wrote:
> On Oct 30, 2008, at 5:30 PM, David Gardner wrote:
>
>   
>> This works. However although type=='file' is the only time I want/need
>> to have a subclass for, I still need to know the original value of
>> type.
>> Is there a way in SA to basically get two copies of the column?
>> Maybe I
>> could return a tuple from MyRow.__getitem__ ?
>>
>> The best think I can think of is to create a view (PostgreSQL):
>> CREATE OR REPLACE VIEW nodehierarchy_view AS  SELECT *, type AS poly
>> FROM nodehierarchy;
>>
>> and map my classes against the view, that way I have two copies of the
>> type columns.
>>
>> To complicate things slightly more I am joining against a type table,
>> who's primary key is a text field. So typically when I just want to
>> know
>> the name of the type I do node.type, but sometimes I need additional
>> information and do a node.Type.other_info. Right now the relation is
>> commented out since it isn't working.
>>
>> node_mapper = mapper(Node, nodehierarchy_table, extension=MyExt(),
>> polymorphic_on=nodehierarchy_table.c.type,
>> polymorphic_identity='node',
>>    properties = {
>>    #'Type' : relation (Type,
>> primaryjoin=(type_table.c.name==nodehierarchy_table.c.type),
>> uselist=False),
>>     
>
> The way I'd want to add "polymorphic_on as a callable" would allow one
> to replace the entire mechanism of the "discriminator", such that
> there's not even a specific column that SQLA knows about in that
> regard.   This is a moderate change to the mapper internals, but the
> big behavioral change is that the *population* of the column would
> also become something you'd have to do on your end, and I'd also have
> to figure out what its behavior with regards to querying becomes - it
> would probably be several functions the user needs to implement.
>
> Right now Im wondering if it's not easier for you to just provide a
> create_instance() mapper extension that just returns the base class
> for all discriminators other than "file", and you just do away with
> using polymorphic_on.     The fact that you are compressing all those
> discriminators into one class means that you're losing a lot of the
> semantics of inheritance already- you cant query for them without
> explicitly saying filter(discriminator==sometype), for example.
>
> >
>
>   


-- 
David Gardner
Pipeline Tools Programmer, "Sid the Science Kid"
Jim Henson Creature Shop
(323) 802-1717 [EMAIL PROTECTED]



--~--~---------~--~----~------------~-------~--~----~
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