如何自定义 web2py 中的 DB(或表单)验证器?

2 投票
1 回答
503 浏览
提问于 2025-04-17 02:01

这是我定义的两个表:

db.define_table('question',
    Field('category_id',db.category),
    Field('content'),
    Field('number_of_options','integer'),
    Field('has_options_detail','boolean',default=False)) ## Has or not has detail for each option

db.define_table('options_detail', ## This table only for options that have detail explanation
    Field('question_id',db.question),
    Field('serial'), ## Option ordering 
    Field('detail')) ## Detail explanation of option

我该怎么做才能限制:db.options_detail表里的question_id必须属于那些“has_options_detail == True”的问题?

提前谢谢你们!

1 个回答

2

这样做就可以了:

db.options_detail.question_id.requires = IS_IN_DB(
    db(db.question.has_options_detail==True), 'question.id')

需要注意的是,IS_IN_DB 验证器可以把一个 DAL 集合对象作为第一个参数(具体可以查看这里),这样你就可以根据任何条件来过滤引用的表。

(你也可以直接在 Field() 声明中指定上面的 requires 参数。)

撰写回答