减少选择的数量

时间:2012-07-24 09:45:41

标签: python web2py

我有两张桌子:

db.define_table('tests', Field('name'), Field('status'),...)
db.tests.status.requires=IS_IN_SET(['OK','obsolete'])
db.define_table('testruns', Field('name'), Field('test', db.tests), ...)

我的表单如下:

form = SQLFORM(db.testruns)

如何更改表单,它只包含状态为“OK”的测试?

1 个答案:

答案 0 :(得分:1)

当你定义像Field('test', db.tests)这样的引用字段时,它会获得一个默认的IS_IN_DB验证器,它会在表单中为它提供一个默认的选择窗口小部件。 IS_IN_DB验证器默认为引用字段中的所有记录,但您可以显式指定自己的IS_IN_DB验证程序并传入DAL集对象,该对象将记录限制为子集(在本例中为tests.status =='确定'):

db.define_table('testruns',
    Field('name'),
    Field('test', db.tests,
          requires=IS_IN_DB(db(db.tests.status == 'OK'), 'tests.id', '%(name)s'),
          represent=lambda id, row: db.tests[id].name))
相关问题