python - Pyramid/SQLAlchemy 显示对象

标签 python object sqlalchemy pyramid object-oriented-database

我正在创建一个记录系统,学生可以在其中注册类(class)。

# 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")

我想显示所有尚未注册类(class)的学生,因此我在程序和模板中使用了以下代码,但它只是在页面上显示所有学生。

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

最佳答案

我认为您的代码甚至会输出每个学生姓名的次数与当前类(class)中的学生人数一样多(如果学生已注册类(class),则输出次数减一):)

您当前的逻辑是

for student in all_student:  # Alice, Bob, Claude
    for enrolled_student in current_class.enrolled_students: # Alice, Bob
        if student != enrolled_student:
            print student

上面的输出将是

Alice, Alice, Bob, Bob, Claude, Claude, Claude  

(第一次迭代:Alice == Alice,跳过。第二次:Alice != Bob,打印。第三次:Alice != Claude,打印,等等)

此外,您的关系设置并不完全是“惯用的 sqlalchemy”。看看http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html#many-to-many如果您按照示例中的方式设置模型(例如使用 relationship() 函数的 secondary 参数),您将能够执行类似的操作

% for st in students:
% if st not in class.enrolled_students:
    <input type="checkbox" name="student_id" value="${ st.id }" >${ st.id } - ${ st.forename } ${ st.surname }</input><br/> 
% endif
% endfor

关于python - Pyramid/SQLAlchemy 显示对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22900596/

相关文章:

python - 如何获取字符串中两个或多个重复字符的索引?

python - 使用傻瓜盒对 CNN 进行攻击的代码,出了什么问题?

Python 日志记录到 Azure

java - 为什么我无法在函数内创建数组对象?

Python:如何检查一个对象是否是一个模块?

scala 复制对象

mysql - Flask-Admin+SQLAlchemy 图像上传在 MySQL 生产环境中有效,但在 SQLite 测试用例 : InterfaceError 中无效

python - 获取绘制在图形上的所有对象(艺术家)

sqlite - Pylons、SQlite 和自动增量字段

python - 奇怪的 python 正则表达式行为 - 可能连接到 unicode 或 sqlalchemy