web2py表示'格式'在孙子

时间:2012-06-29 18:59:15

标签: format data-access-layer web2py

q&a here(和doc)描述了对define_table函数使用format=参数。我有一个问题,让它在一个稍微复杂的情况下工作。我正在使用web2py版本(1, 99, 7, datetime.datetime(2012, 3, 4, 22, 12, 8), 'stable')和Python 2.5.4。 (我正在使用MySQL,但我认为这是无关紧要的。)

我有以下内容:

'独立'(非儿童)表InstitutionPerson。表格TeamInstitution的孩子。表Team_staffPersonTeam连接在一起。这是一个修剪版本:

db.define_table('Person',
                Field('First_name', 'string', length=60, required=True),
                Field('Last_name', 'string', length=60, required=True),
                ...
                format='%(First_name)s %(Last_name)s')

db.define_table('Institution',
                Field('Institution_name', 'string', length=60, required=True,
                   unique=True),
                format='%(Institution_name)s')

db.define_table('Team',
                Field('Institution', db.Institution),
                Field('Sex', 'string', required=True,
                   requires=IS_IN_SET(['m', 'f'])),
                Field('Level', 'string', required=True),
                ...
                format='%(Institution)s %(Sex)s')

db.define_table('Team_staff',
                Field('Team', db.Team),
                Field('Team_staff_member', db.Person),
                ...
                Field('Team_position', 'string', required=True))

到目前为止,这么好。我有一个创建SQLFORM(db.Team_staff)的控制器,以及一个只显示表单的视图。当我下拉“团队”下拉列表时,我看到机构 id 与“性别”值(例如1 f,然后是1 m以及2 f连接起来,然后{{ 1}},等等)。由于Institutionformat='%(Institution_name)s',为什么我没有看到机构名称而不是机构ID?

1 个答案:

答案 0 :(得分:3)

“format”属性不会以这种方式传播到表。相反,您应该能够将“format”属性定义为lambda函数,该函数将表的一行作为其参数:

db.define_table('Team', ...,
    format=lambda r: '%s %s' % (db.Institution[r.Institution].Institution_name,
                                r.Sex))