I'm having trouble with many-to-one relationships to subclasses that use
single table inheritance. I have tried this in 0.5.8 and 0.6beta1.

Here is my test case:

import sqlalchemy as sa
from sqlalchemy import orm
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

employee = sa.Table("employee", Base.metadata,
    sa.Column("id", sa.Integer, primary_key=True),
    sa.Column("type", sa.Integer, nullable=False))

class Employee(Base):
    __table__ = employee
    __mapper_args__ = {"polymorphic_identity": 0,
                       "polymorphic_on": employee.c.type}

class Engineer(Employee):
    __mapper_args__ = {"polymorphic_identity": 1}

class Other(Base):
    __tablename__ = "other"

    # Fields
    id = sa.Column(sa.Integer, primary_key=True)
    engineer_id = sa.Column(sa.Integer,
                            sa.ForeignKey("employee.id"))

    # Relations
    engineer = orm.relation("Engineer")

print Other.engineer.has()

I get this exception:

AttributeError: 'ClauseList' object has no attribute 'proxy_set'

This appears to be the same issue described at
http://groups.google.com/group/sqlalchemy/browse_thread/thread/7fcb0c0c6e1c809f.
Is this a bug? Currently, I am working around the issue by changing
Other.engineer to refer to Employee and using
Other.engineer.of_type(Engineer).has(), but this is less than ideal.

NOTE: In my real use case, I have compound foreign keys and check
constraints on Other to ensure that its engineer_id only points to
Engineer objects. However that was not necessary to demonstrate the
problem, so it has been omitted here.

Thanks,
-Conor

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

Reply via email to