如何在Web2Py中定义枚举值列表

0 投票
1 回答
996 浏览
提问于 2025-04-18 09:41

我正在用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 参数。

撰写回答