I'm trying to implement polymorphic inheritance using the
sqlalchemy.ext.declarative, but the field that I want to use for the
polymorphic_on is not in my polymorphic base table, but at the other end
of a many-to-one relationship. We have items of many types, and in the
item table, we have a type_id field which contains an integer, but in
the item_type table, that integer is mapped to a descriptive name.
Essentially, I'd like to use that name as my polymorphic_identity. I've
tried to implement this with declarative classes below, but I get an
error, also shown below.
class ItemType(Declarative):
__table__ = sa.Table('item_type', Declarative.metadata)
type_id = sa.Column('type_id', sa.Integer, primary_key=True)
description = sa.Column('description', sa.Unicode(250))
item = orm.relation('Item', backref='item_type')
class Item(Declarative):
__table__ = sa.Table('item', Declarative.metadata)
item_id = sa.Column('item_id', sa.Integer, primary_key=True)
type_id = sa.Column('type_id', sa.Integer,
sa.ForeignKey('item_type.type_id'))
short_title = sa.Column('short_title', sa.Unicode(100))
__mapper_args__ = {'polymorphic_on': ItemType.description }
### Traceback follows:
"""
Traceback (most recent call last):
File "polymorph_test.py", line 23, in ?
class ItemType(Declarative):
File "/net/docsouth/dev/lib/python/sqlalchemy/ext/declarative.py",
line 257, in __init__
cls.__mapper__ = mapper_cls(cls, table, properties=our_stuff,
**mapper_args)
File "/net/docsouth/dev/lib/python/sqlalchemy/orm/__init__.py", line
566, in mapper
return Mapper(class_, local_table, *args, **params)
File "/net/docsouth/dev/lib/python/sqlalchemy/orm/mapper.py", line
181, in __init__
self.__compile_properties()
File "/net/docsouth/dev/lib/python/sqlalchemy/orm/mapper.py", line
653, in __compile_properties
self._compile_property(key, prop, False)
File "/net/docsouth/dev/lib/python/sqlalchemy/orm/mapper.py", line
719, in _compile_property
raise exceptions.ArgumentError("Column '%s' is not represented in
mapper's table. Use the `column_property()` function to force this
column to be mapped as a read-only attribute." % str(c))
sqlalchemy.exceptions.ArgumentError: Column 'description' is not
represented in mapper's table. Use the `column_property()` function to
force this column to be mapped as a read-only attribute.
"""
Apparently it can't find the description column, even though it's
clearly defined on ItemType.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" 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/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---