0

私は2つのテーブルを持っています:

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」のテストのみが含まれているフォームを変更するにはどうすればよいですか?

4

1 に答える 1

1

のような参照フィールドを定義するField('test', db.tests)と、デフォルトのIS_IN_DBバリデーターが取得され、フォームのデフォルトの選択ウィジェットが提供されます。バリデーターはデフォルトで参照フィールドのIS_IN_DBすべてのレコードに設定されますが、独自のバリデーターを明示的に指定IS_IN_DBして、レコードをサブセット (この場合は tests.status == 'OK' のレコード) に制限する 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))
于 2012-07-24T14:29:59.153 に答える