对不起标题中的大字,但我正在努力解决这个问题。
在我的教育机构数据库的时间表部分,有课程(课程)和TestExams。两者都以学生,教师,房间等形式在特定时间点索取资源。因此,我的关联表从TestExam或课程连接到学生,教师或房间(...)。我觉得通过文档和关于SO的各种文章在很多不同的方向发送,但没有更聪明。
关于SO的This文章似乎让我很接近,但并不完全在那里。 The documentation on polymorphic似乎表明这是不可能的。
顺便说一句,这些类反映在数据库中的现有视图中,因为数据层中有一些关于更改跟踪的功能。
Claim
表(我的关联表)具有与课程或TestExam相关的claimer_id
和claimer
类型(==鉴别符),以及claimtype
(= =鉴别者)和与教师,学生,房间有关的claim
..
为简单起见,我在这里仅提供了一个多态的实例。
谁能为我提供一个如何解决这个问题的例子?或者我完全走错了方向?
class Lesson(Base):
__tablename__ = 'tx_lesson'
pk = Column(Integer, FetchedValue())
lesson_id = Column(Integer, FetchedValue(), primary_key=True)
Lesson.claims = relationship('<claim?>',
primaryjoin="and_(Lesson.lesson_id == <claim?>.claimer_id,
<claim?>.claimertype == 'Lesson')",
back_populates='lessons', viewonly=True)
class Claim(Base):
__tablename__ = 'tx_claim'
pk = Column(Integer, FetchedValue())
claim_id = Column(Integer, FetchedValue(), primary_key=True)
claimer_id = Column(Integer, ForeignKey('<TestExam Or Lesson' _id))
claim = Column(Integer, ForeignKey('<Teacher, Student or Room' _id))
class Student(Base):
__tablename__ = 'tx_student'
pk = Column(Integer, FetchedValue())
student_id = Column(Integer, FetchedValue(), primary_key=True)
__mapper_args__ = {'<Some Polymorphic black magic here>'}
class Teacher(Base):
# similar columns ...
pass