使用SQLFORM.grid可选构造函数

时间:2015-10-12 13:50:58

标签: web2py

在stackoverflow中的所有成员和web2py中的所有专家级别的好日子!

这是关于使用@Anthony Anthony给我的现有代码的学年,学生名单(Masterlist)和组织罚款。

这些是我的数据库:

让我们从学年开始:

db.define_table('school_year',
            Field('sy',),
            Field('current_year', 'boolean'),
            format='%(sy)s')

下一个学生列表

db.define_table('student_list',
            Field('lastname'),
            Field('firstname'),
            Field('middlename'),
            Field('address'),
            format='%s, %s' % ('%(lastname)s', '%(firstname)s'))

,最后是组织罚款表

db.define_table('org_fines',
            Field('sy_id','reference school_year'),
            Field('stud_id', 'reference student_list'),
            Field('total_fines', 'double'),
            Field('date', 'datetime'),
            Field('paid', 'boolean'))

这是Anthony的原始代码

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, paginate=13)

这是我修改过的代码,但仍然无法使其正常工作。

db.org_fines.sy_id.default = db.school_year(current_year=True).id
def members_fines(ids):
    for id in ids:
        db.org_fines.insert(stud_id=id)
form = SQLFORM.grid(db.student_list, create=False, selectable=members_fines, csv=False)

安东尼在评论中说道,他的一些评论仍然不明白(因为总决赛即将到来):

  

可选参数是一个回调函数,它接收在网格中选择的记录ID列表。作为该参数提供的add_students函数循环遍历ID,并在stud_adviser表中为每个记录插入新记录。因为每个记录的学年和顾问ID应该相同,所以通过设置各自字段的默认属性来设置它们(对于学年,我假设您想要当前学年的ID) - 排除那些来自.insert()调用的字段,将自动插入默认值。

基于此评论:

  

因为每个记录的学年和顾问ID应该相同

因为我在org_fines表中没有顾问ID,所以可以使用Anthony给我的代码吗?

直接提问安东尼

我仍然没有得到它:这些代码有什么区别:auth_user_id,auth_user.id和auth.user_id?我何时何地使用这些代码?请提前感谢赐教

1 个答案:

答案 0 :(得分:0)

解决问题:

旧代码:

db.define_table('org_fines',
        Field('sy_id','reference school_year'),
        Field('stud_id', 'reference student_list'),
        Field('total_fines', 'double'),
        Field('date', 'datetime'),
        Field('paid', 'boolean'))

新代码:

db.define_table('org_fines',
        Field('sy_id','reference school_year'),
        Field('studID', 'reference student_list'),
        Field('total_fines', 'double'),
        Field('date', 'datetime'),
        Field('paid', 'boolean'))

db.org_fines.sy_id.default = db.school_year(current_year=True).id
def add_students(ids):
    for id in ids:
        db.org_fines.insert(studID=id)
grid = SQLFORM.grid(db.student_list, create=False, csv=False, deletable=False, details=False, editable=False, selectable=add_students, 
                    paginate=13, orderby=db.student_list.lastname)

我只是将org_fines中的stud_id更改为studID ...我不知道为什么安东尼的代码不起作用的原因......所以需要一个解释来启发我