2017-04-11 52 views
0

林在web2py中定義了一個表的列表:的web2py創建一個字段是包含以下一些領域的花車

Field('frequency_range_start', 'float', requires=[IS_NOT_EMPTY(), IS_FLOAT_IN_RANGE(0,1000000000)], label="Frequency Start (kHz)", represent=lambda value, row:__represent_kHz(value)), 
Field('frequency_range_end', 'float', requires=[IS_NOT_EMPTY(), IS_FLOAT_IN_RANGE(0,1000000000)], label="Frequency End (kHz)", represent=lambda value, row:__represent_kHz(value)), 
Field('channel_size', 'list:string', requires=[IS_NOT_EMPTY(), IS_FLOAT_IN_RANGE(0,1000000000)], label="Channel Sizes (kHz)", represent=lambda value, row:__represent_kHz_list(float(value))), 

我需要channel_size是浮點值的列表。我還需要在表格上的驗證 - 該需要標籤在上述兩個領域需要照顧......

問:我怎樣才能創建此字段,使其驗證表單只浮動值?

我看「書」在這裏http://web2py.com/books/default/chapter/29/06#Field-types

,但它聽起來好像你可以代替任何類型 - >列表:...

也許我可以使用正則表達式某處只檢查可能是或不可能是實數的數字

回答

1

首先,IS_NOT_EMPTY驗證程序不需要,因爲您正在使用的後續驗證程序已經要求非空值。您可以使用IS_LIST_OF驗證程序。即使將浮點數存儲爲字符串,也可以使用IS_FLOAT_IN_RANGE驗證程序,因爲它將值傳遞給float()

注意,以使其更容易與價值觀工作,一旦你選擇它們,你可以指定一個filter_out函數從字符串列表轉換爲浮動的列表:

Field('channel_size', 'list:string', 
     requires=IS_LIST_OF(IS_FLOAT_IN_RANGE(0, 1000000000), minimum=1), 
     filter_out=lambda floats: [float(f) for f in floats], 
     ...) 

上述要求至少要輸入一個浮點值並將拒絕任何非浮點字符串。當您從字段中選擇數據時,字符串列表將自動轉換爲浮點列表。

請注意,您還可以創建一個custom field type來處理DAL不支持的字段類型(即,您可以創建自己的list:float自定義字段類型)。

相關問題