美好的一天!
我决定提出新问题,因为安东尼解决了我的问题。
基于给定代码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用户名的顾问。
答案 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'))
我想在这里发布图片,但我的声誉还不够。