I have a common User object for my site built as a base class using join tables
class User(Base):
__tablename__ = "auth_user"
id = Column(Integer, primary_key = True)
username = Column(String(100), nullable = False, unique = True, index = True)
...
type = Column(String(1))
__mapper_args__ = {'polymorphic_on' : type, "extension" : HashExtension()}
Then I have a Staff object based on this class
class Staff(User):
__tablename__ = "auth_staff"
__mapper_args__ = {'polymorphic_identity' : 's'}
id = Column(Integer, ForeignKey('auth_user.id'), primary_key = True)
Now I also have a Candidate object, also retrieved from User
class Candidate(User):
__tablename__ = "candidates_candidate"
__mapper_args__ = {'polymorphic_identity' : 'c'}
id = Column(Integer, ForeignKey('auth_user.id'), primary_key = True)
...
staff_id = Column(Integer, ForeignKey("auth_user.id"), nullable = False)
staff = relationship("Staff", backref = backref("candidates", order_by = id))
All fines up to the end of the “Candidate” facility. I want it to bind to the Staff object, but I get errors that there is no "primaryjoin" there, and I'm confused about how this relation should refer to the Staff object - should it refer to the User object as the Person from it ? ....
Any suggestions would be greatly appreciated.
~~~~~~~~~ February 3rd update ~~~~~~~~~~~~~~~
Revised code - still causing errors in primaryjoin. If I add primaryJin, it still throttles
from sqlalchemy import Column, Integer, String, ForeignKey, Boolean
from sqlalchemy.orm import relationship, backref, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
class DomainBase(object):
active = Column(Boolean, default = True, nullable = False)
def __str__(self):
return repr(self)
Base = declarative_base(cls = DomainBase)
class User(Base):
__tablename__ = "auth_user"
id = Column(Integer, primary_key = True)
username = Column(String(100), nullable = False, unique = True, index = True)
type = Column(String(1))
__mapper_args__ = {'polymorphic_on' : type}
class Staff(User):
__tablename__ = "auth_staff"
__mapper_args__ = {'polymorphic_identity' : 's'}
id = Column(Integer, ForeignKey('auth_user.id'), primary_key = True)
class Candidate(User):
__tablename__ = "candidates_candidate"
__mapper_args__ = {'polymorphic_identity' : 'c'}
id = Column(Integer, ForeignKey('auth_user.id'), primary_key = True)
staff_id = Column(Integer, ForeignKey("auth_staff.id"), nullable = False)
staff = relationship("Staff", backref = backref("candidates", order_by = id))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
Session = sessionmaker(bind = engine, autocommit=True)
session = Session()
with session.begin():
s = Staff(username = "DaveSmith")
session.add_all([s])