Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 减少选择的数量_Python_Web2py - Fatal编程技术网

Python 减少选择的数量

Python 减少选择的数量,python,web2py,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) 如何更改表单,它只包含状态为

我有两张桌子:

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”的测试?

当您定义一个参考字段,如
字段('test',db.tests)
时,它会得到一个默认的
IS\u IN\u db
验证器,它在表单中提供了一个默认的选择小部件。
IS_IN_DB
验证器默认为引用字段中的所有记录,但您可以显式指定自己的
IS_IN_DB
验证器,并传入一个DAL集合对象,该对象将记录限制为一个子集(在本例中,那些具有tests.status='OK'):


好安东尼!在这种情况下,代理是如何工作的?它是否使用代码db.tests[id].name访问每个名称的数据库?在为select小部件生成选项时,我认为它将只执行一个查询。但是,当使用
represente
属性时(例如,当序列化testruns表中的一组行或显示只读表单时),我相信它将对每个记录执行单独的db查询。
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))