SQLFORM自引用表显示格式化值

时间:2019-02-07 21:29:21

标签: web2py

是否可以像使用非递归表一样,使用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()

1 个答案:

答案 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()