动态更改web2py sqlform中的字段值

时间:2016-12-13 20:32:23

标签: python web2py

我想使用定义为:

的数据库表生成sqlform.grid
db.define_table('ClientInfo',
            Field('HostID', type='text', label='HostID'),
            Field('MACAddress', type='text',  label='MACAddress'),
            Field('MachineName', type='text', label='MachineName'),
            Field('IPAddress', type='text',  label='IPAddress'),
            Field('TimeOffset', label='TimeOffset'),
            Field('RunningAs', type='text',  label='RunningAs'),
            Field('SystemVersion', type='text',  label='SystemVersion'),
            Field('OSType', type='integer', label='OSType'),
            Field('AgentVersion', type='text', label='AgentVersion'),
            Field('FirstCheckin', type='datetime',  label='FirstCheckin'),
            Field('LastCheckIn', type='datetime', label='LastCheckIn')
           )

OSType字段是一个枚举器类型的整数,因此我想在显示之前更改它,以便它不是通过整数而是通过字符串来标识操作系统类型(例如0 = Windows XP,1 = Windows 2012年,什么不是)。是否有捷径可寻?

1 个答案:

答案 0 :(得分:0)

要更改网格中的显示以及只读表单,请使用该字段的represent属性(请参阅文档的this section末尾)。

您还可以添加IS_IN_SET验证程序,默认情况下会生成任何形式的选择窗口小部件(例如,网格创建和编辑表单)。您可以将字典或元组列表传递给验证器,以指定一组与值关联的标签(请参阅文档的this section末尾):

OS_TYPES = {
    0: 'Windows XP',
    1: 'Windows 2012',
    ...
}

db.define_table('ClientInfo',
    ...
    Field('OSType', type='integer',
          requires=IS_IN_SET(OS_TYPES), # Results in select widget in forms.
          represent=lambda v, r: OS_TYPES[v]), # Sets display value in grid.
    ...)