减少选择数量

2024-05-29 02:08:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两张桌子:

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”的测试?你知道吗


Tags: nameinfielddbisstatustabletests
1条回答
网友
1楼 · 发布于 2024-05-29 02:08:03

当您定义一个像Field('test', db.tests)这样的引用字段时,它会得到一个默认的IS_IN_DB验证器,这个验证器在表单中为它提供了一个默认的select小部件。IS_IN_DB验证器默认为引用字段中的所有记录,但是您可以显式指定自己的IS_IN_DB验证器,并传入一个DAL Set对象,该对象将记录限制为一个子集(在本例中,是那些测试.状态=='好'):

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))

相关问题 更多 >

    热门问题