Suppose I have two distinct and unrelated ORM classes, call them Powers,
and Dominions (which are in tables "powers" and "dominions", both having an
"id" field), and I want them both to have relationships to their own
subclass of a single-table polymorphic setup, call it Things.
class AbstractThing(...):
__tablename__ = "things"
polyType = Column(Integer, index=True) # polymorphic key for various
flavours of things
__mapper_args__ = {'polymorphic_on': polyType, 'polymorphic_identity': -1}
# never instantiated
id = Column(Integer, primary_key=True)
owner_id = Column(Integer) # trying to relate this to completely different
classes in the subclasses below
class PowerThing(AbstractThing):
__mapper_args__ = {'polymorphic_identity': 1}
ForeignKeyConstraint(['owner_id'], ['powers.id'])
itsPower = relationship("Powers", backref="itsThings")
class DominionThing(AbstractThing):
__mapper_args__ = {'polymorphic_identity': 2}
ForeignKeyConstraint(['owner_id'], ['dominions.id'])
itsDominion = relationship("Dominions", backref="itsThings")
Is it possible (even if inadvisable) to do something like this somehow? The
relationship() lines don't find a join condition, and adding a
primaryjoin="PowerThing.owner_id==Powers.id" clause doesn't seem to do it.
Is there some combination of foreign_keys and join conditions that would let
"owner_id" relate to different tables in different polymorphic subclasses.
I've got an existing setup like this that I'd like to map to SQLAlchemy for
now, rather than redo.
--
SQLAlchemy -
The Python SQL Toolkit and Object Relational Mapper
http://www.sqlalchemy.org/
To post example code, please provide an MCVE: Minimal, Complete, and Verifiable
Example. See http://stackoverflow.com/help/mcve for a full description.
---
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/sqlalchemy/d08cef0c-0a4b-47ef-b473-626a152fe8e6%40googlegroups.com.