For anybody following this thread (?)... I'm giving up on this for now and using straight SA code. (the code I posted previously does not work correctly upon further investigation... in particular: selecting from Person returns everything as Person objects instead of what they should be.)

(I spent too much time on it already, so I'll just wait to hear what happens with the collaboration between ActiveMapper and TurboEntity and maybe re-write it then...)

For anybody wanting an example, here's what I have that seems to work correctly now:

------ model.py ----------:

from datetime import datetime
from sqlalchemy import *
from sqlalchemy.ext.assignmapper import assign_mapper
from turbogears.database import metadata, session

people = Table('people', metadata,
    Column('person_id', Integer, primary_key=True),
    Column('name', Unicode(50)),
    Column('type', String(30)),
    )

jerks = Table('jerks', metadata,
Column('person_id', Integer, ForeignKey('people.person_id'), primary_key=True),
    Column('smelly', Boolean),
    )

sweeties = Table('sweeties', metadata,
Column('person_id', Integer, ForeignKey('people.person_id'), primary_key=True),
    Column('extra_nice', Boolean)
    )

class Person(object):
    def __init__(self, **kwargs):
        for key, value in kwargs.iteritems():
            setattr(self, key, value)

class Jerk(Person):
    pass

class Sweetie(Person):
    pass

people_join = polymorphic_union(
    {   'jerk' : people.join(jerks),
        'sweetie' : people.join(sweeties),
        'person' : people.select(people.c.type == 'person'),
    }, None, 'pjoin'
)

person_mapper = assign_mapper(session.context, Person, people)
person_mapper.select_table=people_join
person_mapper.polymorphic_on=people_join.c.type
person_mapper.polymorphic_identity='person'

jerk_mapper = assign_mapper(session.context, Jerk, jerks)
jerk_mapper.inherits=person_mapper
jerk_mapper.polymorphic_identity='jerk'

sweetie_mapper = assign_mapper(session.context, Sweetie, sweeties)
sweetie_mapper.inherits=person_mapper
sweetie_mapper.polymorphic_identity='sweetie'



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/turbogears?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to