我創建了一個記錄系統,學生可以在其中註冊一個課程。顯示對象的金字塔/ SQLAlchemy
# MODEL
class Association(Base):
__tablename__ = 'association'
class_id = Column(Integer, ForeignKey('classes.id'), primary_key=True)
student_id = Column(Integer, ForeignKey('students.id'), primary_key=True)
theClass = relationship("Class")
class Student(Base):
__tablename__ = 'students'
id = Column(Integer, primary_key=True)
name = Column(String(30))
classlist = relationship("Association", backref='student')
class Class(Base):
__tablename__ = 'classes'
id = Column(Integer, primary_key=True)
name = Column(String(20), nullable=False)
teacher_id = Column(Integer, ForeignKey('teachers.id'))
enrolled_students = relationship("Association")
我要顯示所有尚未參加一個班的學生,所以我用下面的代碼在我的程序和模板,但它只是顯示所有的學生在頁面上。
currentClass = session.query(Class).filter_by(id=class_id).first()
students = session.query(Student).all()
# TEMPLATE
% for st in students:
% for assoc in currentClass.enrolled_students:
% if st.id != assoc.student_id:
<input type="checkbox" name="student_id" value="${ st.id }" >${ st.id } - ${ st.forename } ${ st.surname }</input><br/>
% endif
% endfor
% endfor
非常感謝,我認爲問題(正如您所提到的)與關係設置有關。謝謝! – amarz121
回答這樣一個混亂的榮譽 –
@ amarz121:實際上,問題在於檢查「如果學生沒有在課程中註冊」的一般算法,即使使用純Python列表,它也會錯誤地工作。巧合的是,關係配置的改變修復了這一點。 – Sergey