【问题标题】:Retrieving a record into the Masterlist using SQLFORM.grid selectable constructor使用 SQLFORM.grid 可选构造函数将记录检索到 Masterlist
【发布时间】:2015-10-12 13:50:58
【问题描述】:

祝 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'))

这是安东尼的原始代码

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)

安东尼在评论中说,还有一些我不明白的评论(因为总决赛要来了):

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

基于此评论:

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

由于我在 org_fines 表中没有顾问 ID,是否可以使用 Anthony 给我的代码?

直接问安东尼

我还是不明白:这些代码有什么区别:auth_user_id、auth_user.id 和 auth.user_id?我将在何时何地使用这些代码?请赐教提前谢谢

【问题讨论】:

  • “不能让它工作”是什么意思?你想达到什么目标,而正在发生什么?
  • 我想要的是组织官员将检索学生列表中的所有学生并将其放入 orgs_fines 表中,以便组织官员可以对每个学生进行罚款......所以我有了一个想法我将根据您在我上一篇文章中提供的代码使用您的代码...因为 org_fines 表没有 adv_id 所以我删除了“db.stud_adviser.adv_id.default = auth.user_id”并更改了“ db.stud_adviser.insert(stud_id=id)" 到 "db.org_fines.insert(stud_id=id)" 结果是错误:"外键约束失败"
  • @Anthony 我模仿了你的代码。我在 org_fines 表中添加了 auth_user,所以这是 org_fines 中的字段:“'sy_id', 'reference school_year', label='School Year'”, "'adv_id', 'reference auth_user', label='Org Officer'" and "'stud_id', 'reference student_list', label='Student'"... 将在可选中使用的函数:def add_students(ids) :对于 ids 中的 id:db.org_fines.insert(stud_id=id) 并最后查询:“form = SQLFORM.grid(db.student_list, create=False, csv=False, deletable=False, details=False, editable= False, selectable=add_students)" 但它给了我错误...为什么?

标签: web2py


【解决方案1】:

问题已解决:

旧代码:

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...我不知道为什么Anthony的代码不起作用...所以需要一个解释来启发我

【讨论】:

  • 我发现了新问题...为什么这段代码不起作用? "maxtextlength={'org_fines.studID':128}" 名字后面有(...)三个点,但是学生的列宽很大......它可以适合学生的全名
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
  • 2013-12-09
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2021-11-15
  • 2014-01-26
相关资源
最近更新 更多