2

这可能是一个愚蠢的问题,我读过这个:http ://web2py.com/books/default/chapter/29/06#One-to-many-relation

但是我仍然无法理解我的数据库声明哪里出错了。

这是我希望我的表格看起来像的布局,包括参考资料和所有内容:

http://imgur.com/fpaDb

这是我在 db.py 中使用的 web2py 代码

db.define_table('Course',Field('CallNumber','integer'),Field('Section','string',),Field('Title','string'),Field('MinCredit','integer'),Field('MaxCredit','integer'),Field('MaxEnrollment','integer'),Field('CurrentEnrollment','integer'),Field('Status','string'),Field('Instructor1','string'),Field('Term','string'))
db.define_table('Meeting',Field('CallNumber',db.Course),Field('Day','string'),Field('StartTime','string'),Field('EndTime','string'),Field('Site','string'),Field('Building','string'),Field('Room','string'),Field('Activity','string'))
db.define_table('Requirement',Field('CallNumber',db.Course),Field('Control','string'),Field('Argument','string'),Field('Value1','string'),Field('Operator','string'),Field('Value2','string'))

我要做的是确保会议和需求表不是通过 web2py 分配课程表中的条目的任意 id 而是通过 CallNumber 来引用课程表。

任何帮助,将不胜感激。谢谢。

4

1 回答 1

2

引用字段存储被引用表的主键,也就是id字段。如果您想要引用记录的 CallNumber 值,您可以在进行联接时轻松获取它:

db.define_table('Course', Field('CallNumber', 'integer'), ...)
db.define_table('Meeting', Field('Course', db.Course), ...)

row = db(db.Course.id == db.Meeting.Course).select().first()
print row.Course.CallNumber

您还可以进行递归选择

row = db(db.Meeting).select().first()
print row.Course.CallNumber

请注意,递归选择在遍历多条记录时效率较低,因为它为每条记录执行单独的数据库查询。在这种情况下,上面的内部连接方法更有效,因为它只涉及一个查询来检索整个连接记录集。

于 2013-01-15T14:43:48.200 回答