2016-12-13 135 views
0

我要生成使用數據庫表中的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,而不是)。是否有捷徑可尋?

回答

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. 
    ...) 
+0

感謝您的信息,但我更尋找如何修改.grid或.smartgrid輸出,而不是顯示OSType列的0,1,2等,它顯示標籤。我嘗試修改Field()條目,如你所建議的那樣,它沒有改變.grid輸出:( – tjac

+0

@tjac使用替代表示法。編寫一個返回值的函數(例如Windows XP,Windows 2012 ..)給定的id /整數(例如0,1 ..)。閱讀[Field constructor- represent](http://www.web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Field-constructor) 。'db.ClientInfo.OSType.represent = lambda os_id,row:_get_os_name(os_id)'。您也可以使用'IS_IN_SET()'的字典,這將很容易 –

+0

對不起,原來的答案只是集中在窗體也可以創建/編輯記錄)答案已經更新,可以處理表單小部件和顯示網格中的值。 – Anthony