是否可以像使用非递归表一样,使用SQLFORM让递归表提取格式值?
以下两个示例具有相同的结果,一个父字段显示基础ID值,而不是格式化的名称值。
模型
db.define_table('cat',
Field('name', type='string', label='Name'),
Field('parent', 'reference cat', label='Parent'),
format='%(name)s',
)
控制器
def index():
form=SQLFORM(db.cat)
if form.process().accepted:
response.flash = "Updates Accepted"
return locals()
def manage():
form=SQLFORM.grid(db.cat, user_signature=False)
return locals()
答案 0 :(得分:0)
安东尼在评论中提供的答案最终奏效。
将模型更改为以下内容即可使用索引功能。在我的用例中,我需要IS_NULL_OR来允许该值也丢失。
db.define_table('cat',
Field('name', type='string', label='Name'),
Field('parent', 'reference cat', label='Parent'),
format='%(name)s',
)
db.cat.parent.requires = IS_NULL_OR(IS_IN_DB(db, 'cat.id', '%(name)s'))
正如Anthony所指出的,SQLFORM.grid还需要有describe属性来显示正确的值,以上模型导致id变量显示在管理函数中。
在manage函数中,我向父字段添加了一个表示形式,该表示形式可以是原义单词none(如果为null)或查找。
def manage():
db.cat.parent.represent = lambda id, r: db.cat[id].name if id else 'None'
form=SQLFORM.grid(db.cat,
user_signature=False)
return locals()