【问题标题】:Display the actual data instead of a table using SQLFORM.grid使用 SQLFORM.grid 显示实际数据而不是表
【发布时间】:2015-09-29 19:33:21
【问题描述】:

美好的一天!

自从安东尼解决了我的问题后,我决定提出新问题。

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

学年顾问学生 1 步行者 1

注意:walker 是用户名

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

我想在SQLFORM.grid中显示是这样的:

学年顾问学生 2015-16-1 沃克,保罗·多伊,约翰

这在 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

但结果还是一样:

学年顾问学生 1 步行者 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 多名信息技术学生),只是为了知道谁是学生 #1,什么学年是#1,谁是使用walker用户名的顾问。

【问题讨论】:

    标签: web2py


    【解决方案1】:

    首先,不要这样做:

    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 属性,则引用这些表的任何字段都将收到默认的requires 属性和基于引用表的format 属性的默认represent 属性。

    this answer 中的代码几乎正是您所需要的——唯一的区别是您现在需要稍微不同的显示值格式(即,您现在需要“姓氏,名字”而不是“姓氏”) .因此,不要将format 属性设置为'%s(lastname)s''%s(last_name)s',而是将它们更改为'%s(lastname)s, %(firstname)s''%s(last_name)s, %(first_name)s'

    【讨论】:

      【解决方案2】:

      @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'
      

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

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

      它成功了。

      在 student_list 中也是如此,如果我使用此代码,数据将更改为 ID:

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

      我想在这里张贴图片,但我的声誉不够。

      【讨论】:

      • 您确定您的'%(last_name)s', '%(first_name)s' 等于Anthony 的'%(last_name)s, %(first_name)s' 吗? Table.Format 可以是字符串或 Lambda,而不是元组。
      • 注意:Stackoverflow 是一个问答网站,而不是论坛。您将此发布为对您的问题的回答,但这是进一步的信息。在 stackoverflow 上,您不讨论问题。您尝试用一个尽可能简短的问题来表达您的问题,并获得答案并选择解决您问题的答案。
      猜你喜欢
      • 1970-01-01
      • 2018-09-06
      • 2013-03-24
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多