如何在Web2Py中定义枚举值列表
我正在用Web2Py框架开发一个网站。
这个框架提供了一种定义枚举值的方法,如下所示。
我需要定义一个表格,如下所示。
Field('state','string', length=10, requires=IS_IN_SET(('open','closed','not_open')))
此外,我还可以定义一个字段,可以列出值,如下所示。
Field('emails','list:string')
但是,怎样把这些结合起来呢?我需要为一个组织定义周末天数,而且这个天数应该不止一个。
我尝试了以下方法。
db.define_table('organization',
Field('name','string', requires=IS_NOT_EMPTY()),
Field('description','text'),
Field('weekends','list:string', length=10, requires=IS_IN_SET(('sunday','monday','tuesday','wednesday','thursday','friday','saturday'))),
redefine=migrate_flag
)
但是这只定义了一个只有单一值的枚举。我在Web2Py的appadmin界面创建新记录时验证了这一点。在那里我只能为weekends
字段输入一个值。
这样可以用“web2py”的方式实现吗?还是我必须在数据库中创建一个新的周末表,并为组织建立一个外键?
1 个回答
2
使用“multiple”这个参数可以让你选择多个选项,或者强制要求选择多个选项:
IS_IN_SET(('sunday','monday','tuesday','wednesday','thursday','friday','saturday'),
multiple=True)
如果你想要求正好选择两个选项,可以这样做:
IS_IN_SET(('sunday','monday','tuesday','wednesday','thursday','friday','saturday'),
multiple=(2, 2))
当 multiple
设置为 True
时,你可以选择零个或多个选项。multiple
还可以是一个元组,用来指定允许选择的最小和最大数量。
IS_IN_DB
验证器也可以使用 multiple
参数。