在孙子的web2py表示“格式”(web2py representation 'format

2019-09-18 20:00发布

的问答这里 (和DOC)描述了使用的format=参数给define_table功能。 我得到那个在一个稍微复杂的情况下正常工作的问题。 我使用的web2py版本(1, 99, 7, datetime.datetime(2012, 3, 4, 22, 12, 8), 'stable')和Python 2.5.4 。 (我使用的MySQL,但我认为这是无关紧要的。)

我有以下几点:

“独立”的(没有孩子)表InstitutionPerson 。 表Team是一个孩子Institution 。 表Team_staff连接PersonTeam在一起。 这里有一个修剪的版本:

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)并且简单地显示形式的图。 当我下拉“团队”下拉列表中,我看到的机构与“性”值链接(如1 f ,然后1 m下面这一点,那么2 f ,等等)。 由于Institution具有format='%(Institution_name)s' ,为什么我没有看到机构名称,而不是机构ID?

Answer 1:

“格式”属性不跨表这种方式传播。 相反,你应该能够定义的“格式”属性作为一个lambda函数,该函数表作为参数的一排:

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


文章来源: web2py representation 'format' in grandchild