2017-04-11 39 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自定义字段类型)。

相关问题