我有以下關系: acourse有很多course_instances,每個都course_instance屬于 a semester。這是一組大大簡化的模型:class Course(db.Model): __tablename__ = "courses" id = Column(Integer, primary_key=True) course_instances = relationship("CourseInstance", back_populates="course")class CourseInstance(db.Model): __tablename__ = "course_instances" id = Column(Integer, primary_key=True) course_id = Column(Integer, ForeignKey("courses.id")) semester_id = Column(Integer, ForeignKey("semesters.id")) course = relationship("Course", back_populates="course_instances") semester = relationship("Semester", back_populates="course_instances")class Semester(db.Model): __tablename__ = "semesters" id = Column(Integer, primary_key=True) sort_ix = Column(Integer) course_instances = relationship("CourseInstance", back_populates="semester")我經常在什么時候查詢一門課程并將所有實例包含在joinedload/contains_eager/selectinload. 這些實例應始終按sort_ix每個實例所在學期的列排序。有沒有辦法在課程模型級別指定此默認順序?是這樣的:course_instances = relationship( "CourseInstance", back_populates="course", order_by="CourseInstance.semester.sort_ix")我唯一能想到的就是為CourseInstancelike添加一個重復的列semester_sort_ix。
1 回答

慕工程0101907
TA貢獻1887條經驗 獲得超5個贊
用一組不同的關系來解決這個問題。這是解決方案:
class CourseInstance(db.Model):
semester_sort_ix = deferred(select([Semester.sort_ix]).where(Semester.id == semester_id))
class Course(db.Model):
course_instances = relationship(
"CourseInstance", back_populates="course", order_by="desc(CourseInstance.semester_sort_ix)",
)
添加回答
舉報
0/150
提交
取消