使用SQLFORM.grid显示实际数据而不是表

时间:2015-09-29 19:33:21

标签: web2py

美好的一天!

我决定提出新问题,因为安东尼解决了我的问题。

基于给定代码here。我想在SQLFORM.grid中显示数据时显示实际值而不是ID。

School Year    Adviser   Student
1              walker    1

注意:walker是用户名

这个数据检索是可以的,但我想要更多的信息方式。

我想在SQLFORM.grid中显示如下:

School Year    Adviser         Student
2015-16-1      Walker, Paul    Doe, John

这在SQLFORM.grid中是否可行?

这些是调用SQLFORM.grid之前的代码

db.stud_adviser.sy_id.default= db.school_year.sy
db.stud_adviser.adv_id.default= db.auth_user.last_name
db.stud_adviser.stud_id.default= db.student_list.lastname

但结果仍然相同:

School Year    Adviser   Student
1              walker    1
什么都没发生。但是当使用SQLFORM.grid编辑数据时,结果正常。因为这些是我使用的代码。

db.stud_adviser.sy_id.requires= IS_IN_DB(db, 'school_year.id', '%(sy)s')
db.stud_adviser.adv_id.requires=IS_IN_DB(db,'auth_user.id', '%(last_name)s')
db.stud_adviser.stud_id.requires=IS_IN_DB(db,'student_list.id', '%(lastname)s')

但作为程序员,您不希望用户通过单击SQLFORM.grid中的编辑来逐个查看学生(目前我们有300多名infoTech学生)只是为了知道谁是学生#1,什么是学年是#1,谁是使用walker用户名的顾问。

2 个答案:

答案 0 :(得分:0)

首先,不要这样做:

db.stud_adviser.sy_id.default= db.school_year.sy
db.stud_adviser.adv_id.default= db.auth_user.last_name
db.stud_adviser.stud_id.default= db.student_list.lastname

默认值必须是实际值或返回值的函数 - 它们不能是Field个对象(并且它甚至不清楚上述赋值意味着什么)。

其次,不需要显式设置这些字段的requires属性 - 如果您改为设置每个表的format属性,那么引用这些表的任何字段都将收到默认值{ {1}}属性和基于引用表的requires属性的默认represent属性。

this answer中的代码几乎就是您所需要的 - 唯一的区别是您现在需要稍微不同的显示值格式(即,您现在需要"姓氏,名字和#34;而不只是"姓氏")。因此,不要将format属性设置为format'%s(lastname)s',而是将其更改为'%s(last_name)s''%s(lastname)s, %(firstname)s'

答案 1 :(得分:0)

@Anthony,当我在学校试验代码时,我成功(希望如此)设法显示我想要的输出。对于顾问和学生列,它显示姓氏和名字,但学年仍然是ID,这里是代码:

db1.py

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

db.define_table('adviser',
            Field('sy_id', 'reference school_year', label='School Year'),
            Field('adv_id', 'reference auth_user', label='Adviser'))

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

db.define_table('stud_adviser',
            Field('sy_id', 'string', '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 myStudent():

    db.stud_adviser.id.readable=False
    db.auth_user._format = '%s, %s' % ('%(last_name)s', '%(first_name)s')
    form = SQLFORM.grid(db.stud_adviser, csv=False, create=False, details=False, editable=False)
    return locals()

对于Adviser表上的全名,我使用您的代码:

db.auth_user._format = '%(last_name)s', '%(first_name)s'

顾问更改为ID的结果,但如果我将其更改为:

db.auth_user._format = '%s, %s' % ('%(last_name)s', '%(first_name)s')

并且有效。

同样在student_list中,如果我使用此代码,数据会更改为ID:

format=('%(lastname)s', '%(firstname)s'))

我想在这里发布图片,但我的声誉还不够。

相关问题