所有stackoverflow web2py Guru的好日子......
我现在发现了link及其2岁。我遇到了问题而且我不知道如何编码。
我有2个实体(表格),它是M:M关系
第一张表:讲师(顾问) 第二张表:学生名单
现在顾问处理了很多学生,学生有很多顾问吗?
所以我创建了第三个表,并将其命名为Student_Adviser
学年
db.define_table('school_year',
Field('sy',),
Field('current_year', 'boolean'))
学生名单
db.define_table('student_list',
Field('lastname'),
Field('firstname'))
这些是Student_Adviser中的字段
db.define_table('stud_adviser',
Field('sy_id', 'reference school_year', label='School Year'),
Field('adv_id', 'reference auth_user', label='Adviser'),
Field('stud_id', 'reference student_list', label='Student', unique=True)
)
控制器中的
def getStudent():
form = SQLFORM.grid(db.Student_List, csv=False, create=False, selectable=(need code here))
return locals()
我问这样的问题,因为它可以帮助顾问通过激活多个复选框来获取学生列表,因此在他/她选择学生之后他/她将点击提交按钮并且中提取所有已检查的数据将自动添加到Student_Adviser表。我的想法是否可以在web2py中使用?
附加1:
还请添加一个代码,该代码将自动插入已登录的auth_user.id.
当讲师1 auth_user.id为1
时,让我们说教师1已登录,因此他/她在Student_Adviser表中执行默认值adv_id的所有事务将始终为1,依此类推。
附加2:
当我尝试使用db接口手动添加Student_Adviser表中的数据时,我收到了错误。
btw如何发布Traceback错误? Code Sample在Traceback中不起作用。我无法发布错误,因为它会破坏格式...但这是错误代码的最后一行(请基于Student_Adviser中的表格)。
IntegrityError: foreign key constraint failed
答案 0 :(得分:1)
这样的事情应该这样做:
@auth.requires_login()
def getStudent():
db.stud_adviser.sy_id.default = db.school_year(current_year=True).id
db.stud_adviser.adv_id.default = auth.user_id
def add_students(ids):
for id in ids:
db.stud_adviser.insert(stud_id=id)
form = SQLFORM.grid(db.student_list, create=False, selectable=add_students,
csv=False)
return dict(form=form)
selectable
参数是一个回调函数,它接收在网格中选择的记录ID列表。作为该参数提供的add_students
函数循环遍历ID,并在stud_adviser
表中为每个记录插入新记录。因为每个记录的学年和顾问ID应该相同,所以通过设置各自字段的default
属性来设置它们(对于学年,我假设您想要当前学年的ID) - - 通过从.insert()
调用中排除这些字段,将自动插入默认值。
注意,要在网格中显示更多有用的详细信息(而不是学年,顾问和学生记录ID),您可以在每个表上定义“format”属性:
db.define_table('school_year',
Field('sy'),
Field('current_year', 'boolean'),
format='%(sy)s')
db.define_table('student_list',
Field('lastname'),
Field('firstname'),
format='%(lastname)s')
因为db.auth_user
表是自动定义的(使用默认的“format”属性),所以必须在事后更改其“format”属性 - 所以,在调用auth.define_tables()
后的某个地方:
db.auth_user._format = '%(last_name)s'
使用上面定义的“format”属性,现在引用这些表的任何引用字段将根据引用表的“format”属性获得默认的“表示”属性。这将控制网格中(以及SQLFORM和SQLTABLE中)参考字段值的显示。