首页 文章

web2py创建一个浮点列表的字段

提问于
浏览
0

我在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作为浮点值列表 . 我还需要在表单上进行验证 - requires 标签在上面的两个字段中处理...

问:如何创建此字段以使其仅在表单上验证浮点值?

我看了"the book"这里http://web2py.com/books/default/chapter/29/06#Field-types

但它听起来像你可以替换任何类型 - >列表:...

也许我可以在某处使用正则表达式来检查可能是也可能不是实数的数字

1 回答

  • 1

    首先,不需要 IS_NOT_EMPTY 验证器,因为您使用的后续验证器已经需要非空值 .

    使用 list: 字段,您可以使用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 自定义字段类型) .

相关问题