I'm working on a system that has a Base class called Object. Many
other classes inherit from this one class via joined table inheritance
and it's working great. But now there's a problem: The subclass
"Comment" does reference "Object" twice, once for the inheritance and
once as a ForeignKey to mark which object the comment is about.

Code example:
----------------------------
Base = declarative_base()
class Object(Base):
    "Base class for all our Entities"

    __tablename__= 'objects'

    uuid=Column(String(36),primary_key=True)
    discriminator=Column(String(30), nullable=False)

    __mapper_args__ = {'polymorphic_on': discriminator,
                       'polymorphic_identity': 'object'}

    def __init__(self,*args,**kwargs):
        super(Object,self).__init__(*args,**kwargs)
        if not self.uuid:
            # create a random uuid
            self.uuid=str(uuid4())

    def __repr__(self):
        return u"<Object('%s')>" % (self.uuid)

class Comment(Object):
    """Allows commenting of any other entity in the server"""
    __tablename__= 'comments'
    __mapper_args__ = {'polymorphic_identity': 'comment'}

    uuid=Column(String(36),ForeignKey
('objects.uuid'),primary_key=True)
    text=Column(String(),nullable=False)
    author=Column(String(),nullable=False)
    date=Column(AutoNowDateTime(),nullable=False)
    subject_id=Column(String(36),ForeignKey('objects.uuid'))

    def __repr__(self):
        return u"<Comment('%s','%s','%s')>" % (self.author,str
(self.date),self.text[:20])

------------------
This leads to this error:
#ArgumentError: Can't determine join between 'objects' and
'comments';
#tables have more than one foreign key constraint relationship between
them.
#Please specify the 'onclause' of this join explicitly.

I tried to add __mapper_args__ to Comment like
"inherit_condition=Comment.c.uuid==Object.c.uuid"
but while I can get it to initialize, it won't let me query giving me
this error:
AttributeError: 'PropertyLoader' object has no attribute 'strategy'

How can I allow more than one reference between those Classes?

Thanks


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