我有两张桌子:
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”的测试?
答案 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))